# About @Human by Planet Crust

Open-source sovereign AI enterprise system for building, integrating and migrating enterprise applications with multi-agent automation.

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### What is @Human?

#### @Human is the Sovereign AI Enterprise System.

Multi-Agentic AI infrastructure, AI Automation and 100% open-source, @Human increases productivity while driving traditional software and SaaS costs down. Leverage the benefits of AI and stay in control.&#x20;

#### @Human has 4 primary characteristics:

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><h4>Comprehensive and Safer AI Enablement</h4></td><td><ul><li>@Human Agents provide an <strong>Agentforce alternative</strong> for delivering and managing multi-agentic deployments.</li><li>@Human Connections and @Human Automations provide a <strong>Zapier alternative</strong> to integrating with third-party cloud and software providers.</li><li>Build light-weight or full enterprise applications for adding, storing, visualizing and processing data.</li><li>The <a href="/spaces/fxRb72AOujEvknc3Yuyo/pages/VQgMCIGa6MTm7PqNM7kF"><strong>@Human Treaty Compliance Layer</strong></a> (TCL) governance feature is embedded in the @Human Agent configuration console that automatically cross-references every agent's description, system prompt, and guardrails against a curated library of binding international laws, human rights treaties, and regulations.</li></ul></td><td><a href="/files/17SFI9P1ZsUeqcldk3xP">/files/17SFI9P1ZsUeqcldk3xP</a></td></tr><tr><td align="center"><h4>Build or Replicate Enterprise Applications</h4></td><td><ul><li>Comprehensive <strong>Salesforce Alternative</strong> features to design, develop and deploy Customer Resource Management (CRM), Case Management, Service Management Logistics, ERP and other enterprise systems.</li><li>Leverage mature, standardised components, deployed globally by Fortune 100 businesses such as Cisco and KBR, government institutions and thousands of enterprises.</li><li>Replicate and move safely from proprietary solutions such as Salesforce, Zoho, Dynamics and others.</li></ul></td><td><a href="/files/y3P7k3Qc8wyq8i1etRE2">/files/y3P7k3Qc8wyq8i1etRE2</a></td></tr><tr><td align="center"><h4>High Value User Experience (UX)</h4></td><td><ul><li>Work with your staff, partners and AI on @Human Teams, our collaboration platform designed to align humans and LLMs (Large Language Models) to optimal effect.</li><li>Deploy AI Assistants tailored to individual needs and which measurably improve the performance of your staff and improve productivity.</li><li>Use @Human Namespaces to build  Applications to cater for any enterprise system use case.</li><li>Administer and secure @Human with enterprise-grade tools.</li></ul></td><td><a href="/files/sr32fH3JBApW1A7Xc3zw">/files/sr32fH3JBApW1A7Xc3zw</a></td></tr><tr><td align="center"><h4>Absolute Sovereignty</h4></td><td><ul><li>Work with single or multiple AI providers on any @Human instance.</li><li>Deploy @Human wherever you wish.</li><li>Leverage @Human's open standards.</li><li>Own all @Human software code, issued exclusively with an enterprise-friendly Apache v2.0 license.</li></ul></td><td><a href="/files/ReIzg8lXsqH7Dks8IvE4">/files/ReIzg8lXsqH7Dks8IvE4</a></td></tr></tbody></table>


# Getting Started

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

After you receive your email with the URL, browse to your instance:

<figure><img src="/files/2d8ZW4Eyma2iUbYHdVqN" alt=""><figcaption></figcaption></figure>

Click on "Create a new account"

<figure><img src="/files/qdETiWhIHiQMUyHx5JCZ" alt=""><figcaption></figcaption></figure>

Once you've signed up, you will be take directly to the Home page of @Human. The first user to login is always the Super-Admin. For security purposes, subsequent users that sign-up will be allocated the "Authenticated" role by default - this is a role with basic system permission.

<figure><img src="/files/f9pzEaQhoB2v2PlAHXeP" alt=""><figcaption></figcaption></figure>

Enter the "Admin Area" via the left menu bar

<figure><img src="/files/rkMSL1c2nfNXwJakBqmD" alt=""><figcaption></figcaption></figure>

Click on "LLM Providers" (7th item from the top on left menu bar)

<figure><img src="/files/k8jvTB1InpmBlpucKQlx" alt=""><figcaption></figcaption></figure>

Select "+ New LLM Provider". This lets you choose which AI you wish to use. The defaults are Mistral or Anthropic (Claude), but you may also add others.

<figure><img src="/files/ET0qxStoHIIf3wtKWYWp" alt=""><figcaption></figcaption></figure>

Add an LLM Name (can be the same as the provider or not), select your LLM and add your API key

<figure><img src="/files/ez5G798aaD3hDwMAkbzs" alt=""><figcaption></figcaption></figure>

Once setup, you should see the following confirmation in the list of LLM providers:

<figure><img src="/files/GMc08c6ZVhqv65Q6rJVy" alt=""><figcaption></figcaption></figure>

The essentials are now in place to start building your first AI Agents.&#x20;


# Creating your First Agent

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### Introduction

@Human has a vast range of enterprise system builder features. However, simply put, the goal is to use the AI Suite and Application Suite to create AI services and applications for your End-users.&#x20;

You may choose to give your End-users AI superpowers at the heart of a rich ecosystem of third-party software providers, or, you may decide to allocate them a basic role on a single @Human application. Such choices represent the extraordinary opportunity of AI. @Human endeavours to make them manageable, safer and sovereign.&#x20;

As a super-administrator, you may create as many @Human Agents, Automations and Namespaces (where applications live in @Human) as you wish. The only limit is the compute and storage available to you.  &#x20;

### Create your first Agent

{% embed url="<https://app.guideflow.com/player/6kw7zzlbzp>" %}

### Adding your Agent to Sidebar Assistant

All @Human instances have a Sidebar AI Assistant. To display your Agent in the Sidebar, scroll to the bottom left of the Agent Configuration and add the roles for which the Agent should be seen.

<figure><img src="/files/hIGYfcpfYp2MzAiVfDDt" alt=""><figcaption></figcaption></figure>

Save your Agent, then click on the ![](/files/KcAfC9ZbkjdSGLqrbtj5)icon in the top right corner of your screen. The Assistant Sidebar will open and your Agent will be available to use in the dropdown menu at the top of the Sidebar.

<figure><img src="/files/C2V9HdSlBLqyBJaGH0WB" alt=""><figcaption></figcaption></figure>

### Displaying your Agent in @Human Home

Any Agent that displays in the Assistant Sidebar also displays be default in the Agent interface in @Human Home i.e. the configuration is the same for both

<figure><img src="/files/WyLb6zxb2YjQgbubzQuV" alt=""><figcaption></figcaption></figure>


# @Human Home

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

The "Home" page in @Human is where you land immediately after login.

<figure><img src="/files/zEhcsk27x8QLayKusovj" alt=""><figcaption></figcaption></figure>

For Super-Administrators (by default the first person to login), Home consists of three primary sections:

1. Applications is where @Human's key resources are accessed.&#x20;

The platform "Admin Area", "Namespaces" for new application creation and management), the "TAQ" (Trigger/Action/Query) Automation Engine for integrating with third party Connections and Agentic processes, the "Agentic" management engine for creating and managing agents and, lastly, the "Projects" area for organising and attributing various components with labels.&#x20;

<p align="center"><img src="/files/eyr1Kfyami9R8c4jR4bR" alt=""> </p>

What Applications a user sees depends on their Role in the @Human platform.  &#x20;

2. Multi-Agentic conversation interface.&#x20;

When you leave Home, this UI is available on right side-bar by clicking on the AI (:sparkles:) button in the top right corner.

By default, the conversation interface is set to the Super-Administrator Agent, which has access to many of the systems resources. To enable this Agent, you will need to

* Setup an LLM provider in the Admin Area. Mistral is supported by default, but other LLM providers should work too (as long as they provide an API)&#x20;
* Set the Super-Administrator Agent to "Active" in the Agentic configuration&#x20;
* Attribute the LLM provider and model to the Super-Administrator Agent in the Agentic configuration

<figure><img src="/files/7sfxo09ukgn0nqfMSvsq" alt=""><figcaption></figcaption></figure>

You can have multiple chats with any individual Agent by clicking on the "+" sign. Furthermore, you may toggle between different Agents (after you have configured them, of course), by clicking on the drop-down beside the title of the Agent.

<figure><img src="/files/h13kI2vn2uQVs9AjVWjM" alt=""><figcaption></figcaption></figure>

What Agents a user sees depends entirely on the Role you give them in the @Human platform.&#x20;

3. Notifications

Notifications are usually configured with a TAQ Automation and can be both general or linked to a record in a Namespace application. If they are linked to a record, then clicking on the Notification will navigate you to the record in question.&#x20;

<figure><img src="/files/AmayF0OxaSUUTUHpOeLg" alt=""><figcaption></figcaption></figure>


# Docs Link

Explains how Docs Link buttons in the @Human Platform open the relevant @Human Docs page for each feature.

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

Almost every page in the @Human Platform has a ![](/files/x07bUJRrXPeOZGP1sR9Q)button on the right hand side of the top bar:

<figure><img src="/files/StzqQ2BVo9z3x4dTt1bL" alt=""><figcaption></figcaption></figure>

This button serves to take the user directly to the relevant page in the [@Human Docs](https://docs.planetcrust.com/) documentation site.

<figure><img src="/files/REon0Pkg1GESuxqPNKhx" alt=""><figcaption></figcaption></figure>

Most buttons will lead to unique feature explainer pages, but some will lead to shared pages, in particular if a feature needs little explanation.


# Roadmap

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/tOVppXoflqXs4INjcO43" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

### Current

Coming shortly!

{% endstep %}

{% step %}

### Next

Coming shortly!
{% endstep %}

{% step %}

### Later

Coming shortly!
{% endstep %}
{% endstepper %}


# General

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### Create Your First Agent

{% embed url="<https://app.guideflow.com/player/6kw7zzlbzp>" %}

### Add a Treaty Compliance Layer (TCL)

The [Treaty Compliance Layer (TCL)](/human-agents/treaty-compliance-layer-tcl) adds essential international compliance regulations to your @Human Agent.

{% embed url="<https://app.guideflow.com/player/lpnl197ijk>" %}

### Create your first Namespace Application ("Email2")

[Namespaces](/human-namespaces) are where applications are built in @Human. You can create as many as you like.&#x20;

Here we build a simple email list application which we will later integrate with an Automation and an Agent (see below)

{% embed url="<https://app.guideflow.com/player/1pz9l42avk>" %}

### Build an Agent to Generate Email Addresses

This agent generates email addresses which will be used by a TAQ Automation (below) to populate the Email2 Namespace Application (above).&#x20;

{% embed url="<https://app.guideflow.com/player/er58ld8i6r>" %}

### Build your First TAQ Automation

This TAQ (Trigger/Action/Query) Automation uses the Email Generation Agent above to create an email address, then stores this email address to the Email2 Namespace Application (2 steps above)

{% embed url="<https://app.guideflow.com/player/lpxjmg6s4k>" %}

### Enabling the Sidebar Assistant

Depending on their role, any user can have access to multiple @Human Agents

{% embed url="<https://app.guideflow.com/player/dr932mqsor>" %}


# Salesforce Alternative CRM

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### Salesforce Standard Objects

This @Human CRM uses Salesforce Standard Objects to underpin its data model. The vast majority of such [Standard Objects](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_list.htm) can be created/replicated in @Human.&#x20;

### Headless&#x20;

Data Models in @Human are API-First by design. Any Namespace Application, Module or Field can be reached via API. No additional fees, API tariffs or any such commercial usage tax.&#x20;

### Basic Overview

This model shows a high-level view of the components that go into building a Salesforce CRM Alternative. It also highlights ease with which the system can be created. &#x20;

{% embed url="<https://app.guideflow.com/player/lpn5e3dhjp>" %}


# What is @Human Agentic?

Open-Source Agentforce Alternative

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

{% hint style="success" %}
Looking to build your first agent? Jump to the [About](/creating-your-first-agent) section!
{% endhint %}

### Agentforce Alternative

Seamlessly integrated with Corteza Low-Code (the open-source Salesforce alternative), @Human Agentic is a multi-agent framework delivered in 100% open-source code (Apache v2.0 license).

<figure><img src="/files/ZkjSk4W9aC7PyImoMOG0" alt=""><figcaption></figcaption></figure>

### No Limits, No Lock-in

@Human Agentic is intended to drive the costs of using AI down as far as possible. There are no limits on users, agent count, automations, third-party connections or applications&#x20;

<figure><img src="/files/bGq6EAL53CpZ8YcQeRA4" alt=""><figcaption></figcaption></figure>

### AI Safety to the Forefront

LLM AI technology is extraordinary, but the models' fundamental architectures usually depend on probability. @Human has many features which foster greater AI safety and outcomes.&#x20;

@Human is not an LLM (Large Language Model e.g. Mistral, Claude, OpenAI) itself, but rather a layer which sits above or in front of your choice of LLM provider. From this perspective, it can be viewed as a set of meaningful, if ever evolving, constraints on LLM behaviour.&#x20;

For more information, please see the following sections on [AI Safety](/human-agents/ai-safety) and the [Treaty Compliance Layer (TCL)](/human-agents/treaty-compliance-layer-tcl).&#x20;


# AI Safety

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### Safety by Design

@Human Agentic comes with a significant list of safety features. These are likely to evolve as AI technology evolves and will always remain a top priority for Planet Crust.

### Essential Features

#### Active/Inactive Setting

All Agents can be easily switched on or off

<figure><img src="/files/xcMjeqTAZUznslmF17Qw" alt=""><figcaption></figcaption></figure>

#### Model Choice

LLM Provider and Model choice is exclusively set by the Administrator

<figure><img src="/files/sMlGSUEmJqsRzIx1BId7" alt=""><figcaption></figcaption></figure>

#### Temperature

The randomness "Temperature" of any Agents can be set individually

<figure><img src="/files/HHfDYN01IoA5oZQ5mxLh" alt=""><figcaption></figcaption></figure>

#### Budget Controls

Token count and iterations can be controlled on a per Agent basis

<figure><img src="/files/7yxKBlCIQGEcWBOiZjLf" alt=""><figcaption></figcaption></figure>

#### Timeouts

Excessive looping and other expensive runtime errors can be mitigated&#x20;

<figure><img src="/files/5tkAr8oZNFCLXRrSvt8m" alt=""><figcaption></figcaption></figure>

#### Behavioral Guardrails

An unlimited number of guardrails can be specified per Agent

<figure><img src="/files/j7vQmqE3AiA0DjceWV2F" alt=""><figcaption></figcaption></figure>

#### Internal Knowledge Base

Dedicated internal knowledge bases can be used to guide Agentic behaviour

<figure><img src="/files/e5vcNbc74B3YNjnYFI14" alt=""><figcaption></figcaption></figure>

#### MCP Policy

An MCP Policy enforces local data access

<figure><img src="/files/RawEKj6DOCgreK38hgCh" alt=""><figcaption></figcaption></figure>

... and access to Automation tools

<figure><img src="/files/5mQpsewjaENf7dVbW7kh" alt=""><figcaption></figcaption></figure>

#### RBAC Integration

Agentic access can be integrated with the @Human RBAC system

<figure><img src="/files/EHxYsoOps2c2gA9ZqqzD" alt=""><figcaption></figcaption></figure>


# Treaty Compliance Layer (TCL)

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

***

The @Human Treaty Compliance Layer is a governance feature built directly into the @Human Agent configuration console. When an administrator - human or AI - creates an @Human Agent by entering a description, a system prompt, and a set of behavioural guardrails, those three components are automatically and instantly cross-referenced against a structured library of binding international laws, human rights treaties, and regional regulations.&#x20;

<figure><img src="/files/wPjecWxyMq2dqFvH7Gg7" alt=""><figcaption></figcaption></figure>

The compliance library that underpins the layer covers the full spectrum of legal instruments governing AI systems that interact with people. It includes the General Data Protection Regulation (GDPR), the EU AI Act, the Council of Europe Framework Convention on Artificial Intelligence (CETS 225) -  the world's first binding international AI treaty - the EU Charter of Fundamental Rights, the European Convention on Human Rights, the UNESCO Recommendation on the Ethics of Artificial Intelligence, the UN Guiding Principles on Business and Human Rights, and the core ILO labour conventions. Each instrument is represented at the article and clause level, with precise descriptions and canonical interpretation references, so that the cross-referencing process is legally specific rather than generically aspirational.


# Legislation

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### **GDPR - General Data Protection Regulation (EU 2016/679)**&#x20;

The GDPR is the European Union's foundational data protection law, in force since May 2018, and the most operationally significant instrument governing any AI system that processes personal data. It establishes six core principles (lawfulness, fairness, transparency, purpose limitation, data minimisation, accuracy, storage limitation and accountability) and grants individuals enforceable rights including the right to erasure, the right to data portability and, crucially for AI agents, the right under Article 22 not to be subject to decisions based solely on automated processing that produce legal or similarly significant effects. This last right is the direct legal basis for mandatory human-in-the-loop pathways in any @Human Agent whose outputs can materially affect a natural person.

### **EU AI Act - Regulation (EU) 2024/1689**

The EU AI Act, which entered into force in August 2024, is the world's first comprehensive legal framework specifically regulating artificial intelligence systems, applying to any AI whose outputs are used within the European Union regardless of where the provider is based. It establishes a four-tier risk classification - unacceptable, high, limited, and minimal - and imposes graduated obligations accordingly, with Article 5 setting out a list of absolute prohibitions including emotion recognition in workplaces, social scoring, subliminal manipulation, biometric categorisation to infer sensitive characteristics, and real-time remote biometric identification; Article 14 mandating meaningful human oversight for high-risk systems; and Article 50 requiring that users be informed when they are interacting with an AI system, making it the primary legal source for the behavioural constraints in @Human Agents.

### **CETS 225 - Council of Europe Framework Convention on AI (2024)**

Adopted on 17 May 2024 and opened for signature on 5 September 2024, CETS 225 is the world's first binding international treaty on artificial intelligence, signed by the European Union, the United States, the United Kingdom, Canada, Australia, Japan, Israel, and Mexico, and applying to AI systems throughout their entire lifecycle — from design and development through deployment and decommissioning. It requires that all AI activities be consistent with human rights obligations, human dignity, non-discrimination, transparency, accountability, and the rule of law; it introduces explicit obligations around equality and non-discrimination (Article 10), human oversight and the right to meaningful intervention (Article 11), and accountability for adverse impacts (Article 9), making it the broadest international legal anchor for the @Human Treaty Compliance Layer and the instrument that extends its obligations beyond the EU to all signatory states.

### **EU Charter of Fundamental Rights**

The EU Charter, which has the same legal force as the EU Treaties themselves, enshrines the fundamental rights of all persons in the European Union and binds all EU institutions and member states whenever they act within the scope of EU law. For AI agents, its most relevant provisions are Article 7 (respect for private and family life), Article 8 (the right to protection of personal data, which has constitutional rather than merely regulatory status), Article 20 (equality before the law), Article 21 (non-discrimination on grounds including sex, race, ethnicity, religion, disability, age, and sexual orientation), and Article 47 (the right to an effective remedy and a fair trial), which together establish the constitutional foundation for data protection, non-discriminatory agent behaviour and the contestability of automated decisions.

### **ECHR - European Convention on Human Rights (ETS No. 005)**&#x20;

The ECHR is the foundational human rights treaty of the Council of Europe, binding on all 46 member states and enforced by the European Court of Human Rights, whose judgments have directly shaped the law on workplace surveillance and data privacy. For AI agents, Article 8 - the right to respect for private and family life - is the most consequential provision; it has been interpreted by the Court in landmark workplace surveillance cases including Barbulescu v. Romania (2017) and López Ribalda v. Spain (2019) to impose strict proportionality requirements on employer monitoring, directly informing the constraints on worker-monitoring agents in @Human, while Article 10 (freedom of expression) and Article 11 (freedom of assembly and association, including trade union rights) provide the basis for prohibitions on content-suppression and union-activity tracking by agents.

### **UNESCO Recommendation on the Ethics of Artificial Intelligence (2021)**

Adopted unanimously by all 193 UNESCO member states in November 2021, this is the first global instrument on AI ethics to be endorsed at intergovernmental level. While it is a recommendation rather than a binding treaty, its endorsement by every UN member state gives it substantial normative authority as the global ethical consensus on AI. It establishes eleven core principles - including proportionality and do no harm, safety and security, fairness and non-discrimination, privacy and data protection, human oversight and determination, transparency and explainability, responsibility and accountability, and environmental sustainability. Its proportionality principle requires that in cases of irreversible or life-altering decisions humans must retain the final say.

### **UN Guiding Principles on Business and Human Rights (UNGPs, 2011)**

Endorsed by the UN Human Rights Council in June 2011, the UNGPs establish the global standard for corporate responsibility to respect human rights. It is organised around three pillars: the state duty to protect human rights, the corporate responsibility to respect them through Human Rights Due Diligence (HRDD), and access to remedy for affected individuals. The UN Working Group on Business and Human Rights has explicitly applied the UNGPs to AI procurement and deployment, meaning that any enterprise deploying AI agents - including @Human - carries HRDD obligations to identify, prevent, mitigate, and account for adverse human rights impacts.

### **ILO Core Labour Conventions - C87, C98, C111, C190 & MNE Declaration**

The International Labour Organisation's core conventions represent the global floor of workers' rights, binding on the 187 ILO member states that have ratified them and forming part of the ILO Declaration on Fundamental Principles and Rights at Work. Convention C87 (1948) protects freedom of association and the right to organise; C98 (1949) protects the right to collective bargaining; C111 (1958) prohibits discrimination in employment and occupation on grounds including sex, race, colour, religion, political opinion, national extraction, and social origin; C190 (2019) protects workers from violence and harassment; and the ILO's Multinational Enterprises Declaration extends these obligations to supply chain HRDD - together forming the legal basis for @Human's prohibitions on monitoring union activity, algorithmic discrimination in recruitment and evaluation, and abusive surveillance of workers, as well as for the mandatory bias audits required before any employment-context agent is deployed.


# Multi-Agent, Multi-Chat

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### Multi-Chat

All @Human Agents facilitate multiple simultaneous chats with a user

<figure><img src="/files/7WJDlMUYokE5H4k4wUGO" alt=""><figcaption></figcaption></figure>

#### Multi-Agent

Any user may have several Agents available to them simultaneously and toggle between them at will.

<figure><img src="/files/sIJ3I9DVbG5nmhndr2eb" alt=""><figcaption></figcaption></figure>


# Integration with TAQ Automations

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### Introduction

[TAQ (Trigger/Action/Query) Automations](/human-automations) are designed to integrate directly and safely with @Human Agentic. They also act as a fulcrum between @Human Agentic and [@Human Connections](/human-connections).&#x20;

Integration between Agentic and TAQ Automations is two-way:

* An Agent may invoke one or more TAQ Automations ("TAQ")
* A TAQ may invoke one or more @Human Agents

### Agentic Invocation of TAQ

Any Agent can be permitted to invoke a TAQ by clicking on the "Allowed TAQs" dropdown menu in the Agent configuration panel.

<figure><img src="/files/ucy8wqLLJURoCw3XLXS9" alt=""><figcaption></figcaption></figure>

The permitted TAQ will then be added to the MCP (Model Context Protocol) Policy for the Agent in question.

On the TAQ side of the equation, the Trigger type should be set to "Agent Invoked" and the nature of the Agentic output to be received (usually a text string) should be defined in the parameters of the TAQ Trigger.

<figure><img src="/files/qxywkAkg8K9t4Pz3c6lA" alt=""><figcaption></figcaption></figure>

### TAQ Invocation of Agents

An independently triggered TAQ Automation can invoke one or more Agents.

<figure><img src="/files/q8IIhny1jwD3qqPKcqwg" alt=""><figcaption></figcaption></figure>

The Agent can also hand output back to the TAQ and the conversation can be continued.

<figure><img src="/files/UnZMy4LiD80aH2Re4Lq0" alt=""><figcaption></figcaption></figure>

### Different Agents - Different Models?

You may find it useful to select different LLM models depending on the Agent's purpose. For more programmatic or simple actions, a cheaper LLM model will usually suffice.&#x20;

However, for more nuanced communication (e.g. replying to customer enquiry), it makes sense to use more advanced models. In the diagram above, different Agents could employ different LLM models without impacting the design of the TAQ.&#x20;

<figure><img src="/files/q8SfvsSCtfw49ST8RIyG" alt=""><figcaption></figcaption></figure>


# Integration with @Human Connections

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### TAQ as an Integration Fulcrum

@Human Agents will not have direct access to third-party API's. For safety reasons, this will be achieved by the Agent invoking a TAQ automation, which in turn will have access to a permitted list of API Connections. &#x20;

@Human Connections will be available by 30 April 2026&#x20;


# @Human Automations

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/CGiZVx2nTcP4EhUiRMDn" alt=""><figcaption></figcaption></figure>

### What are @Human TAQ Automations?

TAQ stands for Triggers/Actions/Queries. The TAQ Automation Engine is a Zapier-like tool for creating "If-This-Then-That" type process logic.&#x20;

The @Human TAQ Automation Engine (we often refer to it just as "TAQ" - pronounced like Thumb "Tack") runs above the @Human Workflows execution engine. In some respects, it is a vastly simplified version of @Human Workflows, designed to be used by non-engineers. More importantly, it is designed to be used easily and safely with AI Agents.  &#x20;

<figure><img src="/files/mxNTWc2a8HtAnt9vKRGF" alt=""><figcaption></figcaption></figure>


# Creating a New TAQ Automation

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### Navigate to Automations

If you're in @Human Home then this is found on the left menu bar...

<figure><img src="/files/hPUQAQCcwolk2jfAkFT1" alt=""><figcaption></figcaption></figure>

If you are anywhere else in the platform, then this is found on the right menu bar, which can be opened by clicking on the four small squares ![](/files/3ByrTGAiskMXV5TJlqPE)in the top corner of your screen.

<figure><img src="/files/yP2SQD7YF9nCm8jQ9ocZ" alt=""><figcaption></figcaption></figure>

The TAQ Automation menu contains a list of all TAQs in the platform, indicating whether they are "Active" or "Inactive". You may filter the TAQs by name.&#x20;

<figure><img src="/files/oI70XYNzKkuDoKF9EFq5" alt=""><figcaption></figcaption></figure>

Click on ![](/files/x0baJ5NZ9wksKUyPB8LP)to open the "Create new TAQ" modal

<figure><img src="/files/yFLpNSirCedI5xZ3nYsy" alt=""><figcaption></figcaption></figure>

Add a TAQ Name, then click on "Create" to be taken to the TAQ canvas&#x20;

<figure><img src="/files/tRF3GSnnuo3lypifc7Dc" alt=""><figcaption></figcaption></figure>


# TAQ Triggers

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

### Creating Triggers

The first block on any TAQ Canvas will be the "Add Trigger" block

<figure><img src="/files/w9BB3VOpsLQvE9KrPHy1" alt=""><figcaption></figcaption></figure>

Clicking on "Add Trigger" will open a modal from which you can select a Trigger type

<figure><img src="/files/rekMrbOagdgc8enrvQY7" alt=""><figcaption></figcaption></figure>

### Trigger Types

There are 4 key types of TAQ Triggers. They are mostly self-explanatory.

* System Triggers include Manual (i.e. button on a Namespace application), Interval (e.g. every 24 hours) and Timestamp (e.g. DD-MM-YYYY)
* Record Triggers involve triggering a TAQ before and after Namespace application records are created, updated or deleted (e.g. after a lead is created in the @Human CRM, the user will receive a notification)
* User Triggers involve triggering a TAQ after users are created, updated, suspended or deleted (e.g. when a user is created, send them a welcome notification)
* Agent Invoke Triggers are used when a TAQ needs to receive the output of an Agent as its triggering input. The Agent Invoke Trigger enables safe handover between the Agent and the TAQ.&#x20;
* Connection Triggers refer to trigger events from third party connections (e.g. when a new branch is created in Github, update the engineering events record).&#x20;

### System Triggers

#### Manual Trigger

The Manual Trigger is the simplest to configure in the TAQ itself.

<figure><img src="/files/Yd6xvhxsJsUav0NcMRHW" alt=""><figcaption></figcaption></figure>

To use a Manual Trigger in a Namespace application, you will need to add an [Automation block](#user-content-fn-1)[^1] in a Page Builder.&#x20;

<figure><img src="/files/M5azLbSLR2NzlkX2CXFJ" alt=""><figcaption></figcaption></figure>

The button can be added to any page and sized or coloured as required

<figure><img src="/files/FJHc71eJsv9rh5JHPDvF" alt=""><figcaption></figcaption></figure>

#### Interval Trigger

As the name suggests, you may choose an interval from the dropdown list. The TAQ will run each time this interval occurs

<figure><img src="/files/DJCab0C7hkY1J8ue62q2" alt=""><figcaption></figcaption></figure>

#### Timestamp Trigger

Pick a specific date and time at which you require your TAQ to run

<figure><img src="/files/5zf3a8XJRXSTiNyebAOF" alt=""><figcaption></figcaption></figure>

### Record Triggers

#### After Record Create

This Trigger is one of the most popular. You  need to enter both the Namespace application and the specific Module in which the Record will be created. The TAQ will start each time a record is created in this module (e.g. a new lead has been created in the Lead Module of the CRM Namespace, then prompt an agent to write a welcome email and send it the following morning at 9am)

<figure><img src="/files/l4YBaL1yS5LfM9gy3vKA" alt=""><figcaption></figcaption></figure>

#### After Record Delete

You  need to enter both the Namespace application and the specific Module in which the Record will be created. The TAQ will start each time a record is created in this module.

<figure><img src="/files/TYyQkOUidC8PCLkChadx" alt=""><figcaption></figcaption></figure>

#### After Record Undelete

Records at the Namespace application layer are only "soft" deleted in @Human (Hard delete is done at the database layer). This can be a useful feature e.g. if records need to be recovered in order to continue process.

<figure><img src="/files/FCwqF5DE5r88xbIeSoVT" alt=""><figcaption></figcaption></figure>

#### After Record Update

Changes to records can often be used to trigger process e.g. a change in an employee's status might imply the need to have new system roles.

<figure><img src="/files/0vYNYd49xvo0bCD2gjXA" alt=""><figcaption></figcaption></figure>

#### Before Record Create

This is a particularly useful Trigger for cross-checks e.g. verifying that an account does not already exist before you create a new one.

<figure><img src="/files/e7v1Rt6QChcGCISWo2ow" alt=""><figcaption></figcaption></figure>

#### Before Record Delete

This Trigger is useful for cross-checks before removing a record e.g. are there any related outstanding actions, such as support requests, required for an account before the record is deleted.

<figure><img src="/files/VlKCrGyEArnVKzfwYt9z" alt=""><figcaption></figcaption></figure>

#### Before Record Undelete

Can be useful in scenarios where undeletion is subject to a policy check or in scenarios where duplication checking might be necessary.&#x20;

<figure><img src="/files/2g2MCLf8swN2OkRo5F9D" alt=""><figcaption></figcaption></figure>

#### Before Record Update

Excellent for checking whether changes have already been applied or for creating conditional logic based on an existing record state.

<figure><img src="/files/OCDGT9gjbXtrhQ66xARl" alt=""><figcaption></figcaption></figure>

### Agent Invoked Trigger

The Agent Invoked Trigger is specifically for use when an @Human Agent needs to invoke a TAQ and pass a value to it.&#x20;

The type of value expected is usually a text string, but it can also be a number or a boolean/checkbox (e.g. when the Agent needs to confirm a decision).

<figure><img src="/files/Yhnf4AZbgxWCBQxdkPnU" alt=""><figcaption></figcaption></figure>

The TAQ to be used by the Agent is selected within the Agent Configuration interface.&#x20;

<figure><img src="/files/kaAut5Y2c8c6brCRrJxD" alt=""><figcaption></figcaption></figure>

[^1]: Add link


# TAQ Actions and Queries (Lookups)

### Types of Actions and Lookups

The Actions and Lookups in TAQ Automations fall broadly into five categories:

* Creation of Notifications
* Lookup, Create, Update and Delete of Records
* Create, Update and Delete of Users
* Agent Prompting
* Third-party Actions and Lookups. These are not documented here, but in [@Human Connections](/human-connections). &#x20;

### Notifications

#### Send Notification

This is the simpler of the two TAQ notification actions, producing a non-linked notification

<figure><img src="/files/0fNAMKInaJwnAtO9bgz5" alt=""><figcaption></figcaption></figure>

The Notification itself shows directly in the notification sidebar. The number on the alarm bell in the top right corner will increase to indicated a notification. Clicking on the alarm bell opens the notification side bar.&#x20;

<figure><img src="/files/difqcXasedyMprCaq8Np" alt=""><figcaption></figcaption></figure>

### Records

#### Clone Record

Creates a copy of an existing record

<figure><img src="/files/xYlsLrXfFe6W7Gh1a9BW" alt=""><figcaption></figcaption></figure>

#### Create Record

Creates a record in a specific Namespace Module, allowing a value to specified manually or inherited from a previous step (e.g. the output of an Agent).

<figure><img src="/files/ZB5CexHdxVs6rNGgQ8Ks" alt=""><figcaption></figcaption></figure>

#### Delete Record

Deletes a record by its value/ID

<figure><img src="/files/EYBg4QC3EX72ST3PIqeZ" alt=""><figcaption></figcaption></figure>

#### Find Newest Record

Finds the latest record in a specified Namespace Module

<figure><img src="/files/hMTFRP6f2IfTLWwSPmM9" alt=""><figcaption></figcaption></figure>

#### Find Oldest Record

Finds the first record created in a specified Namespace Module

<figure><img src="/files/Bydx2cmUFp74ZOdIc7d5" alt=""><figcaption></figcaption></figure>

#### Update Record

Updates and existing record with one or more specified values.

<figure><img src="/files/7OEE0B7VCgwZTi7XkTJY" alt=""><figcaption></figcaption></figure>


# @Human Connections

Overview of the @Human Connections ecosystem

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/v9GRIaERurgatuzFl6mk" alt=""><figcaption></figcaption></figure>

### What are @Human Connections?

Connections is the API Ecosystem for @Human. There are three essential things you need to know:

{% stepper %}
{% step %}

#### Open-Source Zapier Alternative

Similarly to Zapier, @Human Connections provides integrations with the API's of an ever-growing ecosystem of third-party technologies - though @Human is all open-source. Enter your API keys and off you go!
{% endstep %}

{% step %}

#### Used in @Human Automations

@Human Automations is a TAQ (Trigger/Action/Query) engine in which you use your Connections. For example, you could create an automation where every time a Google Sheet row is added, this triggers the creation of a new record in your CRM.
{% endstep %}

{% step %}

#### Easy to Build

API Connections are mostly straightforward for us to build. We just need your suggestions and preferences and we'll do it for free. Interested? Please join @Human Community (top of this page!) and let us know.
{% endstep %}
{% endstepper %}


# Configuring Connections

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>


# Using Connections

<p align="center"><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="square-caret-right">Try @Human</a><a href="https://buy.polar.sh/polar_cl_MKycmV54KogEiCMy7Oqf4zXIwWZ7wOPhtf5xg3dTn21" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>


# Asana

Asana Connection

<p align="center"><a href="https://polar.sh/checkout/polar_c_H3nQb2tAWLbZL6hB8OspjFzsVlxMoXznIlSzq43sZnx" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://polar.sh/checkout/polar_c_H3nQb2tAWLbZL6hB8OspjFzsVlxMoXznIlSzq43sZnx" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/0cx1u8Wa9TBdqRFTm1Wt" alt=""><figcaption></figcaption></figure>

<h3 align="center">Put Asana to Work with @Human Automations and @Human Agents</h3>

<p align="center">The Asana Connection documents all Triggers, Actions and Query Operations available for creating automations via the Asana API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the Asana Connection?

* Connect to the Asana API in a few clicks
* Use the related Asana Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Task Created**

Triggers on: tasks/task\_created

Triggers when a new task is created in Asana.

**Task Updated**

Triggers on: tasks/task\_updated

Triggers when an existing task is updated in Asana.

**Project Created**

Triggers on: projects/project\_created

Triggers when a new project is created in Asana.

#### Action Operations

[Action: Create a Project](/human-connections/asana/asana/action-create-a-project)

[Action: Update a Project](/human-connections/asana/asana/action-update-a-project)

[Action: Create a Task](/human-connections/asana/asana/action-create-a-task)

[Action: Update a Task](/human-connections/asana/asana/action-update-a-task)

#### Query Operations

[Query: Get a Project](/human-connections/asana/asana/query-get-a-project)

[Query: Get a Task](/human-connections/asana/asana/query-get-a-task)

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **Personal Access Token (PAT)** for **Asana**, follow these steps:

#### **Prerequisites**

* An **Asana account** (free or paid).
* Admin permissions (if creating tokens for an organization).

#### **Steps**

1. **Log in** to your Asana account at [asana.com](https://asana.com).
2. **Click your profile icon** (top-right) → **Settings**.
3. Go to the **Apps** tab.
4. Under **Build new apps**, click **View developer console**.
5. Under **Personal access tokens,** Click **Create New Token**.
6. Enter a **name** (e.g., "API Integration") and set **expiration** (optional).
7. Click **Create Token**.
8. **Copy the token immediately** (it won’t be shown again).
9. **Done.** Use the token in API requests as a **Bearer Token** in the `Authorization` header.

### Configuring Webhooks

1. **Prepare a publicly accessible listener URL** (HTTPS) to receive event notifications.
2. **Implement the handshake response** to echo the `X-Hook-Secret` header back to Asana during the verification request.
3. **Register the webhook** by making an authenticated `POST` request to `https://app.asana.com/api/1.0/webhooks`.
4. **Use your Personal Access Token (PAT)** as a Bearer Token in the `Authorization` header.
5. **Specify the resource ID** (e.g., GID of a project or workspace) and the **target URL** in the JSON payload.
6. **Verify activation** by checking for a `201 Created` status from Asana once the handshake is successful.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "asana-api-v1",
  "status": "active",
  "meta": {
    "short": "Asana",
    "description": "Connect to Asana's API to manage tasks, projects, and teams.",
    "icon": "asana",
    "tags": ["project-management", "task-management", "collaboration"]
  },
  "service": {
    "baseURL": {
      "value": "https://app.asana.com/api/1.0"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "Accept": {
        "value": "application/json"
      },
      "Content-Type": {
        "value": "application/json"
      }
    },
    "auth": {
      "method": "api_token",
      "params": {
        "apiToken": {
          "token": {
            "value": "{{apiToken}}",
            "placeholders": [
              {
                "name": "apiToken",
                "type": "String",
                "description": "Asana Personal Access Token",
                "required": true
              }
            ]
          },
          "headerName": {
            "value": "Authorization"
          }
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```
[
  {
    "handle": "tasks",
    "meta": {
      "short": "Tasks",
      "description": "Manage tasks in Asana, including creation, updates, and retrieval."
    },
    "endpoint": {
      "value": "/tasks",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "The unique identifier for the task."
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": [
          "name"
        ],
        "meta": {
          "description": "The name of the task."
        }
      },
      {
        "name": "notes",
        "type": "String",
        "selector": [
          "notes"
        ],
        "meta": {
          "description": "Detailed description or notes for the task."
        }
      },
      {
        "name": "completed",
        "type": "Boolean",
        "selector": [
          "completed"
        ],
        "meta": {
          "description": "Indicates whether the task is completed."
        }
      },
      {
        "name": "due_on",
        "type": "String",
        "selector": [
          "due_on"
        ],
        "meta": {
          "description": "The due date of the task in YYYY-MM-DD format."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "The task ID.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "create": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Content-Type": "application/json"
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"data\": {\"name\": \"{{name}}\", \"notes\": \"{{notes}}\", \"due_on\": \"{{due_on}}\"}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The name of the task.",
              "required": true
            },
            {
              "name": "notes",
              "type": "String",
              "description": "Detailed description or notes for the task.",
              "required": false
            },
            {
              "name": "due_on",
              "type": "String",
              "description": "The due date of the task in YYYY-MM-DD format.",
              "required": false
            }
          ]
        }
      },
      "update": {
        "method": "PUT",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "The task ID.",
              "required": true
            }
          ]
        },
        "headers": {
          "Content-Type": "application/json"
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"data\": {\"name\": \"{{name}}\", \"notes\": \"{{notes}}\", \"completed\": {{completed}}, \"due_on\": \"{{due_on}}\"}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The name of the task.",
              "required": false
            },
            {
              "name": "notes",
              "type": "String",
              "description": "Detailed description or notes for the task.",
              "required": false
            },
            {
              "name": "completed",
              "type": "Boolean",
              "description": "Indicates whether the task is completed.",
              "required": false
            },
            {
              "name": "due_on",
              "type": "String",
              "description": "The due date of the task in YYYY-MM-DD format.",
              "required": false
            }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "The task ID.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": [
      {
        "event": "task_created",
        "path": "/webhooks/asana/task_created",
        "payload": [
          {
            "name": "task_id",
            "type": "String",
            "selector": [
              "data",
              "id"
            ],
            "meta": {
              "description": "The ID of the created task."
            }
          },
          {
            "name": "task_name",
            "type": "String",
            "selector": [
              "data",
              "name"
            ],
            "meta": {
              "description": "The name of the created task."
            }
          }
        ]
      },
      {
        "event": "task_updated",
        "path": "/webhooks/asana/task_updated",
        "payload": [
          {
            "name": "task_id",
            "type": "String",
            "selector": [
              "data",
              "id"
            ],
            "meta": {
              "description": "The ID of the updated task."
            }
          },
          {
            "name": "task_name",
            "type": "String",
            "selector": [
              "data",
              "name"
            ],
            "meta": {
              "description": "The name of the updated task."
            }
          }
        ]
      }
    ]
  },
  {
    "handle": "projects",
    "meta": {
      "short": "Projects",
      "description": "Manage projects in Asana, including creation, updates, and retrieval."
    },
    "endpoint": {
      "value": "/projects",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "The unique identifier for the project."
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": [
          "name"
        ],
        "meta": {
          "description": "The name of the project."
        }
      },
      {
        "name": "notes",
        "type": "String",
        "selector": [
          "notes"
        ],
        "meta": {
          "description": "Detailed description or notes for the project."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "The project ID.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "create": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Content-Type": "application/json"
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"data\": {\"name\": \"{{name}}\", \"notes\": \"{{notes}}\"}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The name of the project.",
              "required": true
            },
            {
              "name": "notes",
              "type": "String",
              "description": "Detailed description or notes for the project.",
              "required": false
            }
          ]
        }
      },
      "update": {
        "method": "PUT",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "The project ID.",
              "required": true
            }
          ]
        },
        "headers": {
          "Content-Type": "application/json"
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"data\": {\"name\": \"{{name}}\", \"notes\": \"{{notes}}\"}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The name of the project.",
              "required": false
            },
            {
              "name": "notes",
              "type": "String",
              "description": "Detailed description or notes for the project.",
              "required": false
            }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "The project ID.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": [
      {
        "event": "project_created",
        "path": "/webhooks/asana/project_created",
        "payload": [
          {
            "name": "project_id",
            "type": "String",
            "selector": [
              "data",
              "id"
            ],
            "meta": {
              "description": "The ID of the created project."
            }
          },
          {
            "name": "project_name",
            "type": "String",
            "selector": [
              "data",
              "name"
            ],
            "meta": {
              "description": "The name of the created project."
            }
          }
        ]
      }
    ]
  },
  {
    "handle": "access-requests",
    "meta": {
      "short": "Access requests",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/access_requests",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the access request."
        }
      }
    ]
  },
  {
    "handle": "allocations",
    "meta": {
      "short": "Allocations",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/allocations",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the allocation."
        }
      }
    ]
  },
  {
    "handle": "attachments",
    "meta": {
      "short": "Attachments",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/attachments",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the attachment."
        }
      }
    ]
  },
  {
    "handle": "audit-log-api",
    "meta": {
      "short": "Audit log API",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/audit_log_api",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the audit log api."
        }
      }
    ]
  },
  {
    "handle": "batch-api",
    "meta": {
      "short": "Batch API",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/batch_api",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the batch api."
        }
      }
    ]
  },
  {
    "handle": "budgets",
    "meta": {
      "short": "Budgets",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/budgets",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the budget."
        }
      }
    ]
  },
  {
    "handle": "custom-field-settings",
    "meta": {
      "short": "Custom field settings",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/custom_field_settings",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the custom field setting."
        }
      }
    ]
  },
  {
    "handle": "custom-fields",
    "meta": {
      "short": "Custom fields",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/custom_fields",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the custom field."
        }
      }
    ]
  },
  {
    "handle": "custom-types",
    "meta": {
      "short": "Custom types",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/custom_types",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the custom type."
        }
      }
    ]
  },
  {
    "handle": "exports",
    "meta": {
      "short": "Exports",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/exports",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the export."
        }
      }
    ]
  },
  {
    "handle": "goal-relationships",
    "meta": {
      "short": "Goal relationships",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/goal_relationships",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the goal relationship."
        }
      }
    ]
  },
  {
    "handle": "goals",
    "meta": {
      "short": "Goals",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/goals",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the goal."
        }
      }
    ]
  },
  {
    "handle": "jobs",
    "meta": {
      "short": "Jobs",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/jobs",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the job."
        }
      }
    ]
  },
  {
    "handle": "memberships",
    "meta": {
      "short": "Memberships",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/memberships",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the membership."
        }
      }
    ]
  },
  {
    "handle": "organization-exports",
    "meta": {
      "short": "Organization exports",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/organization_exports",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the organization export."
        }
      }
    ]
  },
  {
    "handle": "portfolio-memberships",
    "meta": {
      "short": "Portfolio memberships",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/portfolio_memberships",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the portfolio membership."
        }
      }
    ]
  },
  {
    "handle": "portfolios",
    "meta": {
      "short": "Portfolios",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/portfolios",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the portfolio."
        }
      }
    ]
  },
  {
    "handle": "project-briefs",
    "meta": {
      "short": "Project briefs",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/project_briefs",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the project brief."
        }
      }
    ]
  },
  {
    "handle": "project-memberships",
    "meta": {
      "short": "Project memberships",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/project_memberships",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the project membership."
        }
      }
    ]
  },
  {
    "handle": "project-portfolio-settings",
    "meta": {
      "short": "Project portfolio settings",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/project_portfolio_settings",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the project portfolio setting."
        }
      }
    ]
  },
  {
    "handle": "project-statuses",
    "meta": {
      "short": "Project statuses",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/project_statuses",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the project statuse."
        }
      }
    ]
  },
  {
    "handle": "project-templates",
    "meta": {
      "short": "Project templates",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/project_templates",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the project template."
        }
      }
    ]
  },
  {
    "handle": "rates",
    "meta": {
      "short": "Rates",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/rates",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the rate."
        }
      }
    ]
  },
  {
    "handle": "reactions",
    "meta": {
      "short": "Reactions",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/reactions",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the reaction."
        }
      }
    ]
  },
  {
    "handle": "roles",
    "meta": {
      "short": "Roles",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/roles",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the role."
        }
      }
    ]
  },
  {
    "handle": "rules",
    "meta": {
      "short": "Rules",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/rules",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the rule."
        }
      }
    ]
  },
  {
    "handle": "sections",
    "meta": {
      "short": "Sections",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/sections",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the section."
        }
      }
    ]
  },
  {
    "handle": "status-updates",
    "meta": {
      "short": "Status updates",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/status_updates",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the status update."
        }
      }
    ]
  },
  {
    "handle": "stories",
    "meta": {
      "short": "Stories",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/stories",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the storie."
        }
      }
    ]
  },
  {
    "handle": "tags",
    "meta": {
      "short": "Tags",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/tags",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the tag."
        }
      }
    ]
  },
  {
    "handle": "task-templates",
    "meta": {
      "short": "Task templates",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/task_templates",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the task template."
        }
      }
    ]
  },
  {
    "handle": "team-memberships",
    "meta": {
      "short": "Team memberships",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/team_memberships",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the team membership."
        }
      }
    ]
  },
  {
    "handle": "teams",
    "meta": {
      "short": "Teams",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/teams",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the team."
        }
      }
    ]
  },
  {
    "handle": "time-periods",
    "meta": {
      "short": "Time periods",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/time_periods",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the time period."
        }
      }
    ]
  },
  {
    "handle": "time-tracking-entries",
    "meta": {
      "short": "Time tracking entries",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/time_tracking_entries",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the time tracking entrie."
        }
      }
    ]
  },
  {
    "handle": "timesheet-approval-statuses",
    "meta": {
      "short": "Timesheet approval statuses",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/timesheet_approval_statuses",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the timesheet approval statuse."
        }
      }
    ]
  },
  {
    "handle": "typeahead",
    "meta": {
      "short": "Typeahead",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/typeahead",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the typeahead."
        }
      }
    ]
  },
  {
    "handle": "user-task-lists",
    "meta": {
      "short": "User task lists",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/user_task_lists",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the user task list."
        }
      }
    ]
  },
  {
    "handle": "users",
    "meta": {
      "short": "Users",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/users",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the user."
        }
      }
    ]
  },
  {
    "handle": "workspace-memberships",
    "meta": {
      "short": "Workspace memberships",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/workspace_memberships",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the workspace membership."
        }
      }
    ]
  },
  {
    "handle": "workspaces",
    "meta": {
      "short": "Workspaces",
      "description": "An access request object represents a user's request to an item, such as a project or portfolio, that they do not have access to. The request is sent to the owner of the item for approval."
    },
    "endpoint": {
      "value": "/workspaces",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": [
          "gid"
        ],
        "meta": {
          "description": "The unique identifier for the workspace."
        }
      }
    ]
  }
]
```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create a Project

Asana Operation

<p align="center"><a href="https://polar.sh/checkout/polar_c_H3nQb2tAWLbZL6hB8OspjFzsVlxMoXznIlSzq43sZnx" class="button primary" data-icon="circle-caret-right">Try @Human</a><a href="https://polar.sh/checkout/polar_c_H3nQb2tAWLbZL6hB8OspjFzsVlxMoXznIlSzq43sZnx" class="button primary" data-icon="check">Buy @Human Subscription</a><a href="https://www.planetcrust.com/human-community" class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/0cx1u8Wa9TBdqRFTm1Wt" alt=""><figcaption></figcaption></figure>

<p align="center">The Create a Project action enables users to automate the creation of an Asana Project.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a project manager, I want to create a new project in Asana so that I can organize and track tasks effectively.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| name       | String     | Yes      |
| workspace  | String     | Yes      |
| notes      | String     | No       |
| public     | Boolean    | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-project",
  "state": "inDev",
  "meta": {
    "short": "Create Project",
    "description": "Creates a new project in Asana."
  },
  "input": [
    {
      "name": "name",
      "type": "String",
      "required": true,
      "meta": {
        "description": "Name of the project."
      }
    },
    {
      "name": "workspace",
      "type": "String",
      "required": true,
      "meta": {
        "description": "Workspace ID where the project will be created."
      }
    },
    {
      "name": "notes",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Notes for the project."
      }
    },
    {
      "name": "public",
      "type": "Boolean",
      "required": false,
      "meta": {
        "description": "Whether the project is public to the workspace."
      }
    }
  ],
  "output": [
    {
      "name": "projectId",
      "type": "String",
      "selector": ["data", "gid"],
      "meta": {
        "description": "ID of the created project."
      }
    },
    {
      "name": "projectName",
      "type": "String",
      "selector": ["data", "name"],
      "meta": {
        "description": "Name of the created project."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/projects",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"data\":{\"name\":\"{{name}}\",\"workspace\":\"{{workspace}}\",\"notes\":\"{{notes}}\",\"public\":{{public}}}}",
          "placeholders": [
            {
              "name": "accessToken",
              "type": "String",
              "description": "Asana API access token.",
              "required": true
            },
            {
              "name": "name",
              "type": "String",
              "description": "Name of the project.",
              "required": true
            },
            {
              "name": "workspace",
              "type": "String",
              "description": "Workspace ID where the project will be created.",
              "required": true
            },
            {
              "name": "notes",
              "type": "String",
              "description": "Notes for the project.",
              "required": false
            },
            {
              "name": "public",
              "type": "Boolean",
              "description": "Whether the project is public to the workspace.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Update a Project

Asana Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/0cx1u8Wa9TBdqRFTm1Wt" alt=""><figcaption></figcaption></figure>

<p align="center">The Update a Project action enables users to automate the update of an Asana Project.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a project manager, I want to update project details in Asana so that I can keep project information current and relevant.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| projectId  | String     | Yes      |
| name       | String     | No       |
| notes      | String     | No       |
| public     | Boolean    | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "update-project",
  "state": "inDev",
  "meta": {
    "short": "Update Project",
    "description": "Update an existing project in Asana with new details."
  },
  "input": [
    {
      "name": "projectId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the project to update."
      }
    },
    {
      "name": "name",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The new name for the project."
      }
    },
    {
      "name": "notes",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The new notes for the project."
      }
    },
    {
      "name": "public",
      "type": "Boolean",
      "required": false,
      "meta": {
        "description": "Whether the project is public to the organization."
      }
    }
  ],
  "output": [
    {
      "name": "project",
      "type": "Object",
      "selector": ["data"],
      "meta": {
        "description": "The updated project details."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "PUT",
        "path": "/projects/{{projectId}}",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"data\":{\"name\":\"{{name}}\",\"notes\":\"{{notes}}\",\"public\":{{public}}}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The new name for the project.",
              "required": false
            },
            {
              "name": "notes",
              "type": "String",
              "description": "The new notes for the project.",
              "required": false
            },
            {
              "name": "public",
              "type": "Boolean",
              "description": "Whether the project is public to the organization.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create a Task

Asana Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/0cx1u8Wa9TBdqRFTm1Wt" alt=""><figcaption></figcaption></figure>

<p align="center">The Create a Task action enables users to automate the creation of a Task in an Asana Project.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a project manager, I want to create a new task in Asana so that I can assign work to my team members.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| workspace  | String     | Yes      |
| name       | String     | Yes      |
| notes      | String     | No       |
| projects   | String     | No       |
| assignee   | String     | No       |
| due\_on    | String     | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-task",
  "state": "inDev",
  "meta": {
    "short": "Create Task",
    "description": "Creates a new task in Asana."
  },
  "input": [
    {
      "name": "workspace",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The workspace ID where the task will be created."
      }
    },
    {
      "name": "name",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the task."
      }
    },
    {
      "name": "notes",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The description of the task."
      }
    },
    {
      "name": "projects",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Comma-separated list of project IDs to add the task to."
      }
    },
    {
      "name": "assignee",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The user ID to assign the task to."
      }
    },
    {
      "name": "due_on",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The due date of the task in YYYY-MM-DD format."
      }
    }
  ],
  "output": [
    {
      "name": "task_id",
      "type": "String",
      "selector": ["data", "gid"],
      "meta": {
        "description": "The ID of the created task."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/workspaces/{{workspace}}/tasks",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"data\":{\"name\":\"{{name}}\",\"notes\":\"{{notes}}\",\"projects\":[{{projects}}],\"assignee\":\"{{assignee}}\",\"due_on\":\"{{due_on}}\"}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The name of the task.",
              "required": true
            },
            {
              "name": "notes",
              "type": "String",
              "description": "The description of the task.",
              "required": false
            },
            {
              "name": "projects",
              "type": "String",
              "description": "Comma-separated list of project IDs to add the task to.",
              "required": false
            },
            {
              "name": "assignee",
              "type": "String",
              "description": "The user ID to assign the task to.",
              "required": false
            },
            {
              "name": "due_on",
              "type": "String",
              "description": "The due date of the task in YYYY-MM-DD format.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Update a Task

Asana Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/0cx1u8Wa9TBdqRFTm1Wt" alt=""><figcaption></figcaption></figure>

<p align="center">The Update a Task action enables users to automate the update of a Task in an Asana Project.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a project manager, I want to update task details in Asana so that I can keep my team informed of changes.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| taskGID    | String     | Yes      |
| name       | String     | No       |
| notes      | String     | No       |
| completed  | Boolean    | No       |
| dueOn      | String     | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "update-task",
  "state": "inDev",
  "meta": {
    "short": "Update Task",
    "description": "Update an existing task in Asana."
  },
  "input": [
    {
      "name": "taskGID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The GID of the task to update."
      }
    },
    {
      "name": "name",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The new name for the task."
      }
    },
    {
      "name": "notes",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The new notes for the task."
      }
    },
    {
      "name": "completed",
      "type": "Boolean",
      "required": false,
      "meta": {
        "description": "Whether the task is completed."
      }
    },
    {
      "name": "dueOn",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The due date of the task in YYYY-MM-DD format."
      }
    }
  ],
  "output": [
    {
      "name": "task",
      "type": "Object",
      "selector": ["data"],
      "meta": {
        "description": "The updated task object."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "PUT",
        "path": "/tasks/{{taskGID}}",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"data\": {\"name\": \"{{name}}\", \"notes\": \"{{notes}}\", \"completed\": {{completed}}, \"due_on\": \"{{dueOn}}\"}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The new name for the task.",
              "required": false
            },
            {
              "name": "notes",
              "type": "String",
              "description": "The new notes for the task.",
              "required": false
            },
            {
              "name": "completed",
              "type": "Boolean",
              "description": "Whether the task is completed.",
              "required": false
            },
            {
              "name": "dueOn",
              "type": "String",
              "description": "The due date of the task in YYYY-MM-DD format.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Query: Get a Project

Asana Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/0cx1u8Wa9TBdqRFTm1Wt" alt=""><figcaption></figcaption></figure>

<p align="center">The Get a Project query enables users to fetch details of an Asana Project.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a project manager, I want to retrieve the details of a specific project in Asana so that I can review its status and tasks.

#### Fields

| Field Name   | Field Type | Required |
| ------------ | ---------- | -------- |
| project\_gid | String     | Yes      |
| opt\_fields  | String     | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "get-project",
  "state": "inDev",
  "meta": {
    "short": "Get Project",
    "description": "Retrieves details of a specific project in Asana."
  },
  "input": [
    {
      "name": "project_gid",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The globally unique identifier (GID) of the project."
      }
    },
    {
      "name": "opt_fields",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Comma-separated list of fields to include in the response."
      }
    }
  ],
  "output": [
    {
      "name": "project",
      "type": "Object",
      "selector": ["data"],
      "meta": {
        "description": "The project details retrieved from Asana."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": {
          "value": "/projects/{{project_gid}}",
          "placeholders": [
            {
              "name": "project_gid",
              "type": "String",
              "description": "The globally unique identifier (GID) of the project.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {
          "opt_fields": {
            "value": "{{opt_fields}}",
            "placeholders": [
              {
                "name": "opt_fields",
                "type": "String",
                "description": "Comma-separated list of fields to include in the response.",
                "required": false
              }
            ]
          }
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Query: Get a Task

Asana Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/0cx1u8Wa9TBdqRFTm1Wt" alt=""><figcaption></figcaption></figure>

<p align="center">The Get a Task query enables users to fetch details of an Asana Task.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a project manager, I want to retrieve a specific task from Asana so that I can review its details and update its status.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| task\_id   | String     | Yes      |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "get-task",
  "state": "inDev",
  "meta": {
    "short": "Get Task",
    "description": "Retrieve a specific task from Asana using its task ID."
  },
  "input": [
    {
      "name": "task_id",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the task to retrieve."
      }
    }
  ],
  "output": [
    {
      "name": "task",
      "type": "Object",
      "selector": ["data"],
      "meta": {
        "description": "The retrieved task object."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": "/tasks/{{task_id}}",
        "headers": {
          "Content-Type": "application/json"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# BambooHR

BambooHR Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/QfD5zyhzSwCXEmj0jifr" alt="" width="375"><figcaption></figcaption></figure>

<h3 align="center">Put BambooHR to Work with @Human Automations and @Human Agents</h3>

<p align="center">The BambooHR Connection documents all Triggers, Actions and Query Operations available for creating automations via the BambooHR API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the BambooHR Connection?

* Connect to the BambooHR API in a few clicks
* Use the related BambooHR Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Employee Created**

Triggers on: employees/employee\_created

Triggered when a new employee record is created in BambooHR.

**Employee Updated**

Triggers on: employees/employee\_updated

Triggered when an existing employee's information is updated in BambooHR.

**Time Off Request Created**

Triggers on: time\_off\_requests/time\_off\_request\_created

Triggered when a new time off request is submitted in BambooHR.

**Time Off Request Updated**

Triggers on: time\_off\_requests/time\_off\_request\_updated

Triggered when the status or details of a time off request are updated in BambooHR.

#### Action Operations

[Action: Add Timesheet Clock Entries](/human-connections/bamboohr/bamboohr/action-create-a-project)

[Action: Update Employee](/human-connections/bamboohr/bamboohr/action-update-employee)

[Action: API Request](/human-connections/bamboohr/bamboohr/action-api-request)

#### Query Operations

[Query: Get Summary of Who's Out](/human-connections/bamboohr/bamboohr/query-get-summary-of-whos-out)

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **Personal Access Token (PAT)** for **BambooHR**, follow these steps:

#### **Prerequisites**

* **Admin access** to the BambooHR account (or a user with permission to generate API tokens).

#### **Steps**

1. **Log in** to your BambooHR account.
2. **Navigate** to:
   * Click your **profile icon** (top-right) → **"Settings"** → **"API Keys"** (under "Company Settings").
3. **Generate a new token**:
   * Click **"Add New API Key"**.
   * Enter a **name** for the token (e.g., "System Integration").
   * Set **permissions** (select the required scopes for your use case).
4. **Save & copy the token**:
   * Click **"Save"**.
   * **Copy the generated token** (it will only be shown once).

#### **Required Values**

* **BambooHR Subdomain** (e.g., `yourcompany.bamboohr.com`).
* **API Key (PAT)** (generated above).

### Configuring Webhooks

1. **Log in** to your BambooHR account.
2. **Navigate** to **Settings** (gear icon) → **Account** → **Webhooks**.
3. Click the **+ Add Webhook** button.
4. Enter a **name** for the webhook.
5. Select the **Monitored Fields** that should trigger the webhook.
6. Select the **Posted Fields** to be included in the data payload.
7. Choose the **Data Format** (JSON is recommended).
8. Enter the **Post to URL**.
9. Click **+ Generate Key** to create a **Private Signature Key**.
10. **Copy the signature key** immediately (it won’t be shown again).
11. Click **Save**.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "bamboohr",
  "status": "active",
  "meta": {
    "short": "BambooHR",
    "description": "A connector for integrating with BambooHR's API to manage employee data, time tracking, and HR workflows.",
    "icon": "bamboohr",
    "tags": ["HR", "Employee Management", "API"]
  },
  "service": {
    "baseURL": {
      "value": "https://api.bamboohr.com/api/gateway.php/{{companyDomain}}"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "Accept": {
        "value": "application/json"
      }
    },
    "auth": {
      "method": "basic",
      "params": {
        "basic": {
          "username": {
            "value": "{{apiKey}}",
            "placeholders": [
              {
                "name": "apiKey",
                "type": "String",
                "description": "BambooHR API key",
                "required": true
              }
            ]
          },
          "password": {
            "value": "x",
            "placeholders": []
          }
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```
[
  {
    "handle": "employees",
    "meta": {
      "short": "Employees",
      "description": "Manage employee records including personal details, job information, and employment status."
    },
    "endpoint": {
      "value": "/employees/directory",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Unique identifier for the employee."
        }
      },
      {
        "name": "firstName",
        "type": "String",
        "selector": [
          "firstName"
        ],
        "meta": {
          "description": "First name of the employee."
        }
      },
      {
        "name": "lastName",
        "type": "String",
        "selector": [
          "lastName"
        ],
        "meta": {
          "description": "Last name of the employee."
        }
      },
      {
        "name": "jobTitle",
        "type": "String",
        "selector": [
          "jobTitle"
        ],
        "meta": {
          "description": "Current job title of the employee."
        }
      },
      {
        "name": "workEmail",
        "type": "String",
        "selector": [
          "workEmail"
        ],
        "meta": {
          "description": "Work email address of the employee."
        }
      },
      {
        "name": "workPhone",
        "type": "String",
        "selector": [
          "workPhone"
        ],
        "meta": {
          "description": "Work phone number of the employee."
        }
      },
      {
        "name": "hireDate",
        "type": "String",
        "selector": [
          "hireDate"
        ],
        "meta": {
          "description": "Date when the employee was hired."
        }
      },
      {
        "name": "employmentStatus",
        "type": "String",
        "selector": [
          "employmentStatus"
        ],
        "meta": {
          "description": "Current employment status of the employee."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "Integer",
              "description": "The employee ID.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": [
      {
        "event": "employee_created",
        "path": "/webhooks/bamboohr/employee_created",
        "payload": [
          {
            "name": "employeeId",
            "type": "Integer",
            "selector": [
              "employeeId"
            ],
            "meta": {
              "description": "ID of the created employee."
            }
          },
          {
            "name": "eventType",
            "type": "String",
            "selector": [
              "eventType"
            ],
            "meta": {
              "description": "Type of webhook event."
            }
          }
        ]
      },
      {
        "event": "employee_updated",
        "path": "/webhooks/bamboohr/employee_updated",
        "payload": [
          {
            "name": "employeeId",
            "type": "Integer",
            "selector": [
              "employeeId"
            ],
            "meta": {
              "description": "ID of the updated employee."
            }
          },
          {
            "name": "eventType",
            "type": "String",
            "selector": [
              "eventType"
            ],
            "meta": {
              "description": "Type of webhook event."
            }
          }
        ]
      }
    ]
  },
  {
    "handle": "time_off_requests",
    "meta": {
      "short": "Time Off Requests",
      "description": "Manage time off requests including approvals and balances."
    },
    "endpoint": {
      "value": "/time_off/requests",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Unique identifier for the time off request."
        }
      },
      {
        "name": "employeeId",
        "type": "Integer",
        "selector": [
          "employeeId"
        ],
        "meta": {
          "description": "ID of the employee who made the request."
        }
      },
      {
        "name": "startDate",
        "type": "String",
        "selector": [
          "start"
        ],
        "meta": {
          "description": "Start date of the time off request."
        }
      },
      {
        "name": "endDate",
        "type": "String",
        "selector": [
          "end"
        ],
        "meta": {
          "description": "End date of the time off request."
        }
      },
      {
        "name": "status",
        "type": "String",
        "selector": [
          "status"
        ],
        "meta": {
          "description": "Current status of the time off request."
        }
      },
      {
        "name": "type",
        "type": "String",
        "selector": [
          "type"
        ],
        "meta": {
          "description": "Type of time off requested."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {
          "start": {
            "value": "{{startDate}}",
            "placeholders": [
              {
                "name": "startDate",
                "type": "String",
                "description": "Start date for filtering requests.",
                "required": false
              }
            ]
          },
          "end": {
            "value": "{{endDate}}",
            "placeholders": [
              {
                "name": "endDate",
                "type": "String",
                "description": "End date for filtering requests.",
                "required": false
              }
            ]
          }
        },
        "bodyTemplate": null
      },
      "create": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"employeeId\": {{employeeId}}, \"start\": \"{{startDate}}\", \"end\": \"{{endDate}}\", \"type\": \"{{type}}\"}",
          "placeholders": [
            {
              "name": "employeeId",
              "type": "Integer",
              "description": "ID of the employee.",
              "required": true
            },
            {
              "name": "startDate",
              "type": "String",
              "description": "Start date of the time off.",
              "required": true
            },
            {
              "name": "endDate",
              "type": "String",
              "description": "End date of the time off.",
              "required": true
            },
            {
              "name": "type",
              "type": "String",
              "description": "Type of time off.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "time_off_request_created",
        "path": "/webhooks/bamboohr/time_off_request_created",
        "payload": [
          {
            "name": "requestId",
            "type": "Integer",
            "selector": [
              "requestId"
            ],
            "meta": {
              "description": "ID of the created time off request."
            }
          },
          {
            "name": "employeeId",
            "type": "Integer",
            "selector": [
              "employeeId"
            ],
            "meta": {
              "description": "ID of the employee who made the request."
            }
          }
        ]
      },
      {
        "event": "time_off_request_updated",
        "path": "/webhooks/bamboohr/time_off_request_updated",
        "payload": [
          {
            "name": "requestId",
            "type": "Integer",
            "selector": [
              "requestId"
            ],
            "meta": {
              "description": "ID of the updated time off request."
            }
          },
          {
            "name": "status",
            "type": "String",
            "selector": [
              "status"
            ],
            "meta": {
              "description": "Updated status of the time off request."
            }
          }
        ]
      }
    ]
  },
  {
    "handle": "employee_files",
    "meta": {
      "short": "Employee Files",
      "description": "Manage files and documents associated with employee records."
    },
    "endpoint": {
      "value": "/employees/{{employeeId}}/files/view",
      "placeholders": [
        {
          "name": "employeeId",
          "type": "Integer",
          "description": "The ID of the employee.",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Unique identifier for the file."
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": [
          "name"
        ],
        "meta": {
          "description": "Name of the file."
        }
      },
      {
        "name": "originalFileName",
        "type": "String",
        "selector": [
          "originalFileName"
        ],
        "meta": {
          "description": "Original name of the uploaded file."
        }
      },
      {
        "name": "size",
        "type": "String",
        "selector": [
          "size"
        ],
        "meta": {
          "description": "File size."
        }
      },
      {
        "name": "dateCreated",
        "type": "String",
        "selector": [
          "dateCreated"
        ],
        "meta": {
          "description": "Date the file was added."
        }
      },
      {
        "name": "createdBy",
        "type": "String",
        "selector": [
          "createdBy"
        ],
        "meta": {
          "description": "User who uploaded the file."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{fileId}}",
          "placeholders": [
            {
              "name": "fileId",
              "type": "Integer",
              "description": "The ID of the file.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": []
  },
  {
    "handle": "employee_dependents",
    "meta": {
      "short": "Employee Dependents",
      "description": "Manage the dependents associated with an employee."
    },
    "endpoint": {
      "value": "/employees/{{employeeId}}/dependents",
      "placeholders": [
        {
          "name": "employeeId",
          "type": "Integer",
          "description": "The ID of the employee.",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Unique identifier for the dependent."
        }
      },
      {
        "name": "firstName",
        "type": "String",
        "selector": [
          "firstName"
        ],
        "meta": {
          "description": "First name of the dependent."
        }
      },
      {
        "name": "lastName",
        "type": "String",
        "selector": [
          "lastName"
        ],
        "meta": {
          "description": "Last name of the dependent."
        }
      },
      {
        "name": "relationship",
        "type": "String",
        "selector": [
          "relationship"
        ],
        "meta": {
          "description": "Relationship of the dependent to the employee."
        }
      },
      {
        "name": "gender",
        "type": "String",
        "selector": [
          "gender"
        ],
        "meta": {
          "description": "Gender of the dependent."
        }
      },
      {
        "name": "dateOfBirth",
        "type": "String",
        "selector": [
          "dateOfBirth"
        ],
        "meta": {
          "description": "Date of birth of the dependent."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": []
  },
  {
    "handle": "employment_status",
    "meta": {
      "short": "Employment Status",
      "description": "Track the employment status changes for employees."
    },
    "endpoint": {
      "value": "/employees/status",
      "placeholders": []
    },
    "fields": [
      {
        "name": "employeeId",
        "type": "Integer",
        "selector": [
          "employeeId"
        ],
        "meta": {
          "description": "ID of the employee."
        }
      },
      {
        "name": "status",
        "type": "String",
        "selector": [
          "status"
        ],
        "meta": {
          "description": "Current status."
        }
      },
      {
        "name": "date",
        "type": "String",
        "selector": [
          "date"
        ],
        "meta": {
          "description": "Date of the status change."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": []
  },
  {
    "handle": "capabilities",
    "meta": {
      "short": "Goals",
      "description": "Manage employee goals and objectives."
    },
    "endpoint": {
      "value": "/performance/goals",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Unique identifier of the goal."
        }
      },
      {
        "name": "title",
        "type": "String",
        "selector": [
          "title"
        ],
        "meta": {
          "description": "Title of the goal."
        }
      },
      {
        "name": "status",
        "type": "String",
        "selector": [
          "status"
        ],
        "meta": {
          "description": "Status of the goal."
        }
      },
      {
        "name": "dueDate",
        "type": "String",
        "selector": [
          "dueDate"
        ],
        "meta": {
          "description": "Due date for the goal."
        }
      },
      {
        "name": "employeeId",
        "type": "Integer",
        "selector": [
          "employeeId"
        ],
        "meta": {
          "description": "ID of the assigned employee."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {
          "employeeId": {
            "value": "{{employeeId}}",
            "placeholders": [
              {
                "name": "employeeId",
                "type": "Integer",
                "description": "Filter goals by employee ID.",
                "required": false
              }
            ]
          }
        },
        "bodyTemplate": null
      }
    },
    "webhooks": []
  },
  {
    "handle": "employee_directory",
    "meta": {
      "short": "Directory",
      "description": "Access the company directory of employees."
    },
    "endpoint": {
      "value": "/employees/directory",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Employee ID."
        }
      },
      {
        "name": "displayName",
        "type": "String",
        "selector": [
          "displayName"
        ],
        "meta": {
          "description": "Full display name."
        }
      },
      {
        "name": "jobTitle",
        "type": "String",
        "selector": [
          "jobTitle"
        ],
        "meta": {
          "description": "Job title."
        }
      },
      {
        "name": "department",
        "type": "String",
        "selector": [
          "department"
        ],
        "meta": {
          "description": "Department name."
        }
      },
      {
        "name": "location",
        "type": "String",
        "selector": [
          "location"
        ],
        "meta": {
          "description": "Work location."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": []
  },
  {
    "handle": "applicant_tracking",
    "meta": {
      "short": "Applicants",
      "description": "Manage job applicants and recruiting processes."
    },
    "endpoint": {
      "value": "/applicant_tracking/applications",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Application ID."
        }
      },
      {
        "name": "candidateId",
        "type": "Integer",
        "selector": [
          "candidate",
          "id"
        ],
        "meta": {
          "description": "Candidate ID."
        }
      },
      {
        "name": "jobId",
        "type": "Integer",
        "selector": [
          "job",
          "id"
        ],
        "meta": {
          "description": "Job ID."
        }
      },
      {
        "name": "status",
        "type": "String",
        "selector": [
          "status",
          "label"
        ],
        "meta": {
          "description": "Application status."
        }
      },
      {
        "name": "appliedDate",
        "type": "String",
        "selector": [
          "appliedDate"
        ],
        "meta": {
          "description": "Date applied."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": []
  },
  {
    "handle": "timesheets",
    "meta": {
      "short": "Timesheets",
      "description": "Manage employee time tracking and timesheet entries."
    },
    "endpoint": {
      "value": "/timesheets/entries",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Timesheet entry ID."
        }
      },
      {
        "name": "employeeId",
        "type": "Integer",
        "selector": [
          "employeeId"
        ],
        "meta": {
          "description": "Employee ID."
        }
      },
      {
        "name": "date",
        "type": "String",
        "selector": [
          "date"
        ],
        "meta": {
          "description": "Date of the entry."
        }
      },
      {
        "name": "hours",
        "type": "Float",
        "selector": [
          "hours"
        ],
        "meta": {
          "description": "Number of hours worked."
        }
      },
      {
        "name": "projectId",
        "type": "Integer",
        "selector": [
          "projectId"
        ],
        "meta": {
          "description": "Project ID."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {
          "start": {
            "value": "{{start}}",
            "placeholders": [
              {
                "name": "start",
                "type": "String",
                "description": "Start date for filtering timesheets.",
                "required": false
              }
            ]
          },
          "end": {
            "value": "{{end}}",
            "placeholders": [
              {
                "name": "end",
                "type": "String",
                "description": "End date for filtering timesheets.",
                "required": false
              }
            ]
          }
        },
        "bodyTemplate": null
      }
    },
    "webhooks": []
  },
  {
    "handle": "benefits",
    "meta": {
      "short": "Benefits",
      "description": "Explore and manage employee benefits plans and enrollments."
    },
    "endpoint": {
      "value": "/benefits/plans",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Benefit plan ID."
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": [
          "name"
        ],
        "meta": {
          "description": "Plan name."
        }
      },
      {
        "name": "provider",
        "type": "String",
        "selector": [
          "provider"
        ],
        "meta": {
          "description": "Provider name."
        }
      },
      {
        "name": "planType",
        "type": "String",
        "selector": [
          "planType"
        ],
        "meta": {
          "description": "Type of the benefit plan."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": []
  },
  {
    "handle": "training",
    "meta": {
      "short": "Training",
      "description": "Track employee training types and completion statuses."
    },
    "endpoint": {
      "value": "/training/type",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "Integer",
        "selector": [
          "id"
        ],
        "meta": {
          "description": "Training type ID."
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": [
          "name"
        ],
        "meta": {
          "description": "Name of the training."
        }
      },
      {
        "name": "description",
        "type": "String",
        "selector": [
          "description"
        ],
        "meta": {
          "description": "Description of the training."
        }
      },
      {
        "name": "required",
        "type": "Boolean",
        "selector": [
          "required"
        ],
        "meta": {
          "description": "Indicates if the training is required."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": []
  }
]
```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Add Timesheet Clock Entries

BambooHR Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/QfD5zyhzSwCXEmj0jifr" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Add Timesheet Clock Entries action records time entries for employee timesheets.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to add clock entries to an employee's timesheet in BambooHR so that I can accurately track their working hours.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| employeeId | Integer    | Yes      |
| date       | String     | Yes      |
| start      | String     | Yes      |
| end        | String     | Yes      |
| note       | String     | No       |

### Related Connections

[BambooHR](/human-connections/bamboohr/bamboohr)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "add-timesheet-clock-entries",
  "state": "inDev",
  "meta": {
    "short": "Add Timesheet Clock Entries",
    "description": "Adds clock entries to a timesheet in BambooHR."
  },
  "input": [
    {
      "name": "employeeId",
      "type": "Integer",
      "required": true,
      "meta": {
        "description": "The ID of the employee."
      }
    },
    {
      "name": "date",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The date of the clock entry in YYYY-MM-DD format."
      }
    },
    {
      "name": "start",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The start time of the clock entry in HH:MM format."
      }
    },
    {
      "name": "end",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The end time of the clock entry in HH:MM format."
      }
    },
    {
      "name": "note",
      "type": "String",
      "required": false,
      "meta": {
        "description": "An optional note for the clock entry."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates if the clock entry was successfully added."
      }
    },
    {
      "name": "message",
      "type": "String",
      "selector": ["message"],
      "meta": {
        "description": "A message describing the result of the operation."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/api/gateway.php/v1/employees/{{employeeId}}/time_clock",
        "headers": {
          "Content-Type": "application/json",
          "Accept": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"date\":\"{{date}}\",\"start\":\"{{start}}\",\"end\":\"{{end}}\",\"note\":\"{{note}}\"}",
          "placeholders": [
            {
              "name": "employeeId",
              "type": "Integer",
              "description": "The ID of the employee.",
              "required": true
            },
            {
              "name": "date",
              "type": "String",
              "description": "The date of the clock entry in YYYY-MM-DD format.",
              "required": true
            },
            {
              "name": "start",
              "type": "String",
              "description": "The start time of the clock entry in HH:MM format.",
              "required": true
            },
            {
              "name": "end",
              "type": "String",
              "description": "The end time of the clock entry in HH:MM format.",
              "required": true
            },
            {
              "name": "note",
              "type": "String",
              "description": "An optional note for the clock entry.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Update Employee

BambooHR Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/QfD5zyhzSwCXEmj0jifr" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Update Employee action modifies an employee's existing record with new or updated information.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to update an employee's details in BambooHR so that I can keep employee records accurate and up-to-date.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| employeeId | String     | Yes      |
| firstName  | String     | No       |
| lastName   | String     | No       |
| jobTitle   | String     | No       |
| workEmail  | String     | No       |
| workPhone  | String     | No       |
| department | String     | No       |
| location   | String     | No       |
| status     | String     | No       |

### Related Connections

[BambooHR](/human-connections/bamboohr/bamboohr)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "update-employee",
  "state": "inDev",
  "meta": {
    "short": "Update Employee",
    "description": "Update an existing employee's details in BambooHR."
  },
  "input": [
    {
      "name": "employeeId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The unique identifier for the employee in BambooHR."
      }
    },
    {
      "name": "firstName",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The first name of the employee."
      }
    },
    {
      "name": "lastName",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The last name of the employee."
      }
    },
    {
      "name": "jobTitle",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The job title of the employee."
      }
    },
    {
      "name": "workEmail",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The work email address of the employee."
      }
    },
    {
      "name": "workPhone",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The work phone number of the employee."
      }
    },
    {
      "name": "department",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The department of the employee."
      }
    },
    {
      "name": "location",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The location of the employee."
      }
    },
    {
      "name": "status",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The employment status of the employee.",
        "options": ["active", "inactive", "on leave"]
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the update was successful."
      }
    },
    {
      "name": "employeeId",
      "type": "String",
      "selector": ["employeeId"],
      "meta": {
        "description": "The unique identifier for the updated employee."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/api/gateway.php/v1/employees/{{employeeId}}",
        "headers": {
          "Content-Type": "application/json",
          "Accept": "application/json"
        },
        "bodyTemplate": {
          "value": "{\n  \"firstName\": \"{{firstName}}\",\n  \"lastName\": \"{{lastName}}\",\n  \"jobTitle\": \"{{jobTitle}}\",\n  \"workEmail\": \"{{workEmail}}\",\n  \"workPhone\": \"{{workPhone}}\",\n  \"department\": \"{{department}}\",\n  \"location\": \"{{location}}\",\n  \"status\": \"{{status}}\"\n}",
          "placeholders": [
            {
              "name": "employeeId",
              "type": "String",
              "description": "The unique identifier for the employee in BambooHR.",
              "required": true
            },
            {
              "name": "firstName",
              "type": "String",
              "description": "The first name of the employee.",
              "required": false
            },
            {
              "name": "lastName",
              "type": "String",
              "description": "The last name of the employee.",
              "required": false
            },
            {
              "name": "jobTitle",
              "type": "String",
              "description": "The job title of the employee.",
              "required": false
            },
            {
              "name": "workEmail",
              "type": "String",
              "description": "The work email address of the employee.",
              "required": false
            },
            {
              "name": "workPhone",
              "type": "String",
              "description": "The work phone number of the employee.",
              "required": false
            },
            {
              "name": "department",
              "type": "String",
              "description": "The department of the employee.",
              "required": false
            },
            {
              "name": "location",
              "type": "String",
              "description": "The location of the employee.",
              "required": false
            },
            {
              "name": "status",
              "type": "String",
              "description": "The employment status of the employee.",
              "required": false,
              "options": ["active", "inactive", "on leave"]
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: API Request

BambooHR Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/QfD5zyhzSwCXEmj0jifr" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The API Request action sends a custom API call to interact with BambooHR's system.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to make API requests to BambooHR so that I can integrate employee data with other systems.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| endpoint   | String     | Yes      |
| method     | String     | Yes      |
| body       | String     | No       |
| headers    | String     | No       |

### Related Connections

[BambooHR](/human-connections/bamboohr/bamboohr)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "api-request",
  "state": "inDev",
  "meta": {
    "short": "API Request",
    "description": "Make an API request to BambooHR"
  },
  "input": [
    {
      "name": "endpoint",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The BambooHR API endpoint to call"
      }
    },
    {
      "name": "method",
      "type": "String",
      "required": true,
      "meta": {
        "description": "HTTP method to use (GET, POST, PUT, PATCH, DELETE)"
      }
    },
    {
      "name": "body",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Request body for POST/PUT/PATCH requests"
      }
    },
    {
      "name": "headers",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Additional headers as JSON string"
      }
    }
  ],
  "output": [
    {
      "name": "response",
      "type": "String",
      "selector": ["body"],
      "meta": {
        "description": "Raw response from BambooHR API"
      }
    },
    {
      "name": "statusCode",
      "type": "Integer",
      "selector": ["status"],
      "meta": {
        "description": "HTTP status code of the response"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "{{method}}",
        "path": "{{endpoint}}",
        "headers": {
          "Content-Type": "application/json",
          "Accept": "application/json",
          "{{#if headers}}{{headers}}{{/if}}": ""
        },
        "bodyTemplate": {
          "value": "{{#if body}}{{body}}{{/if}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Query: Get Summary of Who's Out

BambooHR Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/QfD5zyhzSwCXEmj0jifr" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Get Summary of Who's Out query retrieves a list of employees currently on leave or absent.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to retrieve a summary of who's out in my department this week so that I can plan resources accordingly.

#### Fields

| Field Name   | Field Type | Required |
| ------------ | ---------- | -------- |
| departmentId | Integer    | No       |
| startDate    | String     | No       |
| endDate      | String     | No       |

### Related Connections

[BambooHR](/human-connections/bamboohr/bamboohr)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "get-summary-of-whos-out",
  "state": "inDev",
  "meta": {
    "short": "Get Summary of Who's Out",
    "description": "Retrieves a summary of employees who are currently out of the office."
  },
  "input": [
    {
      "name": "departmentId",
      "type": "Integer",
      "required": false,
      "meta": {
        "description": "Filter by department ID."
      }
    },
    {
      "name": "startDate",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Start date for the time-off summary (format: YYYY-MM-DD)."
      }
    },
    {
      "name": "endDate",
      "type": "String",
      "required": false,
      "meta": {
        "description": "End date for the time-off summary (format: YYYY-MM-DD)."
      }
    }
  ],
  "output": [
    {
      "name": "summary",
      "type": "String",
      "selector": ["data", "summary"],
      "meta": {
        "description": "Summary of employees who are out."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": "/reports/whos_out",
        "headers": {
          "Accept": "application/json"
        },
        "queryParams": {
          "departmentId": "{{departmentId}}",
          "startDate": "{{startDate}}",
          "endDate": "{{endDate}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Bluesky

Bluesky Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/mJhUKtLAiobthslPs0Q4" alt="" width="188"><figcaption></figcaption></figure>

<h3 align="center">Put Bluesky to Work with @Human Automations and @Human Agents</h3>

<p align="center">The Bluesky Connection documents all Triggers, Actions and Query Operations available for creating automations via the Bluesky API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the Bluesky Connection?

* Connect to the Bluesky API in a few clicks
* Use the related Bluesky Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Action Operations

[Action: Like Post](/human-connections/bluesky/bluesky/action-like-post)

[Action: Repost Post](/human-connections/bluesky/bluesky/action-repost-post)

[Action: Create Post](/human-connections/bluesky/bluesky/action-create-post)

#### Query Operations

[Query: Find Thread](/human-connections/bluesky/bluesky/query-find-thread)

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **Personal Access Token (PAT)** for **Bluesky**, follow these steps:

1. **Log in** to your Bluesky account at <https://bsky.app> (ensure you're using the correct account if managing multiple).
2. Navigate to **Settings**:
   * Click your profile icon (top-right).
   * Select **"Settings"** from the dropdown.
3. Go to **App Passwords**:
   * In the left sidebar, select **"App Passwords"** (under "Advanced").
4. **Generate a new token**:
   * Click **"Generate New Password"**.
   * Enter a descriptive name (e.g., "API Access").
   * Click **"Create"**.
5. **Copy the token**:
   * The token will appear **once**—copy it immediately.

***

**Token Scope**: This PAT grants full account access. Use securely.

### Configuring Webhooks

1. **Identify a Relay Endpoint**: Select a public Jetstream relay (e.g., `wss://jetstream2.us-east.bsky.network/subscribe`).
2. **Define Subscription Filters**: Specify the `wantedCollections` (e.g., `app.bsky.feed.post`) using query parameters in the connection URL.
3. **Establish a Persistent Connection**: Open a WebSocket connection to the relay to receive a real-time JSON stream of network activity.
4. **Implement an Event Listener**: Create a consumer service to parse the incoming stream and filter for relevant events.
5. **Forward to a Webhook URL**: Configure your service to execute an HTTP POST request to your target endpoint for each matching event.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "bluesky-v1",
  "status": "active",
  "meta": {
    "short": "Bluesky",
    "description": "Connect to Bluesky's social networking API to interact with posts, users, and feeds.",
    "icon": "bluesky",
    "tags": ["social", "api", "networking"]
  },
  "service": {
    "baseURL": {
      "value": "https://bsky.social/xrpc/{{endpoint}}"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "Accept": {
        "value": "application/json"
      }
    },
    "auth": {
      "method": "api_token",
      "params": {
        "apiToken": {
          "token": {
            "value": "{{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Bluesky access token for authentication",
                "required": true
              }
            ]
          },
          "headerName": {
            "value": "Authorization"
          }
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```json
[
  {
    "handle": "app-bsky-actor-getPreferences",
    "meta": {
      "short": "getPreferences",
      "description": "Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.actor.getPreferences",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-actor-getProfile",
    "meta": {
      "short": "getProfile",
      "description": "Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.actor.getProfile",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "Handle or DID of account to fetch profile of.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-actor-getProfiles",
    "meta": {
      "short": "getProfiles",
      "description": "Get detailed profile views of multiple actors."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.actor.getProfiles",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actors": {
            "value": "{{actors}}",
            "placeholders": [
              {
                "name": "actors",
                "type": "Integer",
                "description": "actors",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-actor-getSuggestions",
    "meta": {
      "short": "getSuggestions",
      "description": "Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.actor.getSuggestions",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-actor-putPreferences",
    "meta": {
      "short": "putPreferences",
      "description": "Set the private preferences attached to the account."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.actor.putPreferences",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"preferences\": \"{{preferences}}\"}",
          "placeholders": [
            {
              "name": "preferences",
              "type": "Integer",
              "description": "preferences",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-actor-searchActors",
    "meta": {
      "short": "searchActors",
      "description": "Find actors (profiles) matching search criteria. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.actor.searchActors",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "term": {
            "value": "{{term}}",
            "placeholders": [
              {
                "name": "term",
                "type": "String",
                "description": "DEPRECATED: use 'q' instead.",
                "required": false
              }
            ]
          },
          "q": {
            "value": "{{q}}",
            "placeholders": [
              {
                "name": "q",
                "type": "String",
                "description": "Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-actor-searchActorsTypeahead",
    "meta": {
      "short": "searchActorsTypeahead",
      "description": "Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.actor.searchActorsTypeahead",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "term": {
            "value": "{{term}}",
            "placeholders": [
              {
                "name": "term",
                "type": "String",
                "description": "DEPRECATED: use 'q' instead.",
                "required": false
              }
            ]
          },
          "q": {
            "value": "{{q}}",
            "placeholders": [
              {
                "name": "q",
                "type": "String",
                "description": "Search query prefix; not a full query string.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-ageassurance-begin",
    "meta": {
      "short": "begin",
      "description": "Initiate Age Assurance for an account."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.ageassurance.begin",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"email\": \"{{email}}\", \"language\": \"{{language}}\", \"countryCode\": \"{{countryCode}}\", \"regionCode\": \"{{regionCode}}\"}",
          "placeholders": [
            {
              "name": "email",
              "type": "String",
              "description": "The user's email address to receive Age Assurance instructions.",
              "required": true
            },
            {
              "name": "language",
              "type": "String",
              "description": "The user's preferred language for communication during the Age Assurance process.",
              "required": true
            },
            {
              "name": "countryCode",
              "type": "String",
              "description": "An ISO 3166-1 alpha-2 code of the user's location.",
              "required": true
            },
            {
              "name": "regionCode",
              "type": "String",
              "description": "An optional ISO 3166-2 code of the user's region or state within the country.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-ageassurance-getConfig",
    "meta": {
      "short": "getConfig",
      "description": "Returns Age Assurance configuration for use on the client."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.ageassurance.getConfig",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-ageassurance-getState",
    "meta": {
      "short": "getState",
      "description": "Returns server-computed Age Assurance state, if available, and any additional metadata needed to compute Age Assurance state client-side."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.ageassurance.getState",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "countryCode": {
            "value": "{{countryCode}}",
            "placeholders": [
              {
                "name": "countryCode",
                "type": "String",
                "description": "countryCode",
                "required": true
              }
            ]
          },
          "regionCode": {
            "value": "{{regionCode}}",
            "placeholders": [
              {
                "name": "regionCode",
                "type": "String",
                "description": "regionCode",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-bookmark-createBookmark",
    "meta": {
      "short": "createBookmark",
      "description": "Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.bookmark.createBookmark",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"uri\": \"{{uri}}\", \"cid\": \"{{cid}}\"}",
          "placeholders": [
            {
              "name": "uri",
              "type": "String",
              "description": "uri",
              "required": true
            },
            {
              "name": "cid",
              "type": "String",
              "description": "cid",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-bookmark-deleteBookmark",
    "meta": {
      "short": "deleteBookmark",
      "description": "Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.bookmark.deleteBookmark",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"uri\": \"{{uri}}\"}",
          "placeholders": [
            {
              "name": "uri",
              "type": "String",
              "description": "uri",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-bookmark-getBookmarks",
    "meta": {
      "short": "getBookmarks",
      "description": "Gets views of records bookmarked by the authenticated user. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.bookmark.getBookmarks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-contact-dismissMatch",
    "meta": {
      "short": "dismissMatch",
      "description": "Removes a match that was found via contact import. It shouldn't appear again if the same contact is re-imported. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.contact.dismissMatch",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"subject\": \"{{subject}}\"}",
          "placeholders": [
            {
              "name": "subject",
              "type": "String",
              "description": "The subject's DID to dismiss the match with.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-contact-getMatches",
    "meta": {
      "short": "getMatches",
      "description": "Returns the matched contacts (contacts that were mutually imported). Excludes dismissed matches. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.contact.getMatches",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-contact-getSyncStatus",
    "meta": {
      "short": "getSyncStatus",
      "description": "Gets the user's current contact import status. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.contact.getSyncStatus",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-contact-importContacts",
    "meta": {
      "short": "importContacts",
      "description": "Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.contact.importContacts",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"token\": \"{{token}}\", \"contacts\": \"{{contacts}}\"}",
          "placeholders": [
            {
              "name": "token",
              "type": "String",
              "description": "JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`.",
              "required": true
            },
            {
              "name": "contacts",
              "type": "Integer",
              "description": "List of phone numbers in global E.164 format (e.g., '+12125550123'). Phone numbers that cannot be normalized into a valid phone number will be discarded. Should not repeat the 'phone' input used in `app.bsky.contact.verifyPhone`.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-contact-removeData",
    "meta": {
      "short": "removeData",
      "description": "Removes all stored hashes used for contact matching, existing matches, and sync status. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.contact.removeData",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-contact-sendNotification",
    "meta": {
      "short": "sendNotification",
      "description": "System endpoint to send notifications related to contact imports. Requires role authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.contact.sendNotification",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"from\": \"{{from}}\", \"to\": \"{{to}}\"}",
          "placeholders": [
            {
              "name": "from",
              "type": "String",
              "description": "The DID of who this notification comes from.",
              "required": true
            },
            {
              "name": "to",
              "type": "String",
              "description": "The DID of who this notification should go to.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-contact-startPhoneVerification",
    "meta": {
      "short": "startPhoneVerification",
      "description": "Starts a phone verification flow. The phone passed will receive a code via SMS that should be passed to `app.bsky.contact.verifyPhone`. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.contact.startPhoneVerification",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"phone\": \"{{phone}}\"}",
          "placeholders": [
            {
              "name": "phone",
              "type": "String",
              "description": "The phone number to receive the code via SMS.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-contact-verifyPhone",
    "meta": {
      "short": "verifyPhone",
      "description": "Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.contact.verifyPhone",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"phone\": \"{{phone}}\", \"code\": \"{{code}}\"}",
          "placeholders": [
            {
              "name": "phone",
              "type": "String",
              "description": "The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`.",
              "required": true
            },
            {
              "name": "code",
              "type": "String",
              "description": "The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-draft-createDraft",
    "meta": {
      "short": "createDraft",
      "description": "Inserts a draft using private storage (stash). An upper limit of drafts might be enforced. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.draft.createDraft",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"draft\": \"{{draft}}\"}",
          "placeholders": [
            {
              "name": "draft",
              "type": "Integer",
              "description": "draft",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-draft-deleteDraft",
    "meta": {
      "short": "deleteDraft",
      "description": "Deletes a draft by ID. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.draft.deleteDraft",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"id\": \"{{id}}\"}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "id",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-draft-getDrafts",
    "meta": {
      "short": "getDrafts",
      "description": "Gets views of user drafts. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.draft.getDrafts",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-draft-updateDraft",
    "meta": {
      "short": "updateDraft",
      "description": "Updates a draft using private storage (stash). If the draft ID points to a non-existing ID, the update will be silently ignored. This is done because updates don't enforce draft limit, so it accepts all writes, but will ignore invalid ones. Requires authentication."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.draft.updateDraft",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"draft\": \"{{draft}}\"}",
          "placeholders": [
            {
              "name": "draft",
              "type": "Integer",
              "description": "draft",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-describeFeedGenerator",
    "meta": {
      "short": "describeFeedGenerator",
      "description": "Get information about a feed generator, including policies and offered feed URIs. Does not require auth; implemented by Feed Generator services (not App View)."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.describeFeedGenerator",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getActorFeeds",
    "meta": {
      "short": "getActorFeeds",
      "description": "Get a list of feeds (feed generator records) created by the actor (in the actor's repo)."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getActorFeeds",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "actor",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getActorLikes",
    "meta": {
      "short": "getActorLikes",
      "description": "Get a list of posts liked by an actor. Requires auth, actor must be the requesting account."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getActorLikes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "actor",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getAuthorFeed",
    "meta": {
      "short": "getAuthorFeed",
      "description": "Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getAuthorFeed",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "actor",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          },
          "filter": {
            "value": "{{filter}}",
            "placeholders": [
              {
                "name": "filter",
                "type": "String",
                "description": "Combinations of post/repost types to include in response.",
                "required": false,
                "default": "posts_with_replies"
              }
            ]
          },
          "includePins": {
            "value": "{{includePins}}",
            "placeholders": [
              {
                "name": "includePins",
                "type": "Integer",
                "description": "includePins",
                "required": false,
                "default": "False"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getFeed",
    "meta": {
      "short": "getFeed",
      "description": "Get a hydrated feed from an actor's selected feed generator. Implemented by App View."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getFeed",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "feed": {
            "value": "{{feed}}",
            "placeholders": [
              {
                "name": "feed",
                "type": "String",
                "description": "feed",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getFeedGenerator",
    "meta": {
      "short": "getFeedGenerator",
      "description": "Get information about a feed generator. Implemented by AppView."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getFeedGenerator",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "feed": {
            "value": "{{feed}}",
            "placeholders": [
              {
                "name": "feed",
                "type": "String",
                "description": "AT-URI of the feed generator record.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getFeedGenerators",
    "meta": {
      "short": "getFeedGenerators",
      "description": "Get information about a list of feed generators."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getFeedGenerators",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "feeds": {
            "value": "{{feeds}}",
            "placeholders": [
              {
                "name": "feeds",
                "type": "Integer",
                "description": "feeds",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getFeedSkeleton",
    "meta": {
      "short": "getFeedSkeleton",
      "description": "Get a skeleton of a feed provided by a feed generator. Auth is optional, depending on provider requirements, and provides the DID of the requester. Implemented by Feed Generator Service."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getFeedSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "feed": {
            "value": "{{feed}}",
            "placeholders": [
              {
                "name": "feed",
                "type": "String",
                "description": "Reference to feed generator record describing the specific feed being requested.",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getLikes",
    "meta": {
      "short": "getLikes",
      "description": "Get like records which reference a subject (by AT-URI and CID)."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getLikes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "uri": {
            "value": "{{uri}}",
            "placeholders": [
              {
                "name": "uri",
                "type": "String",
                "description": "AT-URI of the subject (eg, a post record).",
                "required": true
              }
            ]
          },
          "cid": {
            "value": "{{cid}}",
            "placeholders": [
              {
                "name": "cid",
                "type": "String",
                "description": "CID of the subject record (aka, specific version of record), to filter likes.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getListFeed",
    "meta": {
      "short": "getListFeed",
      "description": "Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getListFeed",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "list": {
            "value": "{{list}}",
            "placeholders": [
              {
                "name": "list",
                "type": "String",
                "description": "Reference (AT-URI) to the list record.",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getPostThread",
    "meta": {
      "short": "getPostThread",
      "description": "Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getPostThread",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "uri": {
            "value": "{{uri}}",
            "placeholders": [
              {
                "name": "uri",
                "type": "String",
                "description": "Reference (AT-URI) to post record.",
                "required": true
              }
            ]
          },
          "depth": {
            "value": "{{depth}}",
            "placeholders": [
              {
                "name": "depth",
                "type": "Integer",
                "description": "How many levels of reply depth should be included in response.",
                "required": false,
                "default": "6"
              }
            ]
          },
          "parentHeight": {
            "value": "{{parentHeight}}",
            "placeholders": [
              {
                "name": "parentHeight",
                "type": "Integer",
                "description": "How many levels of parent (and grandparent, etc) post to include.",
                "required": false,
                "default": "80"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getPosts",
    "meta": {
      "short": "getPosts",
      "description": "Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getPosts",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "uris": {
            "value": "{{uris}}",
            "placeholders": [
              {
                "name": "uris",
                "type": "Integer",
                "description": "List of post AT-URIs to return hydrated views for.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getQuotes",
    "meta": {
      "short": "getQuotes",
      "description": "Get a list of quotes for a given post."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getQuotes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "uri": {
            "value": "{{uri}}",
            "placeholders": [
              {
                "name": "uri",
                "type": "String",
                "description": "Reference (AT-URI) of post record",
                "required": true
              }
            ]
          },
          "cid": {
            "value": "{{cid}}",
            "placeholders": [
              {
                "name": "cid",
                "type": "String",
                "description": "If supplied, filters to quotes of specific version (by CID) of the post record.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getRepostedBy",
    "meta": {
      "short": "getRepostedBy",
      "description": "Get a list of reposts for a given post."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getRepostedBy",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "uri": {
            "value": "{{uri}}",
            "placeholders": [
              {
                "name": "uri",
                "type": "String",
                "description": "Reference (AT-URI) of post record",
                "required": true
              }
            ]
          },
          "cid": {
            "value": "{{cid}}",
            "placeholders": [
              {
                "name": "cid",
                "type": "String",
                "description": "If supplied, filters to reposts of specific version (by CID) of the post record.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getSuggestedFeeds",
    "meta": {
      "short": "getSuggestedFeeds",
      "description": "Get a list of suggested feeds (feed generators) for the requesting account."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getSuggestedFeeds",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-getTimeline",
    "meta": {
      "short": "getTimeline",
      "description": "Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.getTimeline",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "algorithm": {
            "value": "{{algorithm}}",
            "placeholders": [
              {
                "name": "algorithm",
                "type": "String",
                "description": "Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-searchPosts",
    "meta": {
      "short": "searchPosts",
      "description": "Find posts matching search criteria, returning views of those posts. Note that this API endpoint may require authentication (eg, not public) for some service providers and implementations."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.searchPosts",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "q": {
            "value": "{{q}}",
            "placeholders": [
              {
                "name": "q",
                "type": "String",
                "description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.",
                "required": true
              }
            ]
          },
          "sort": {
            "value": "{{sort}}",
            "placeholders": [
              {
                "name": "sort",
                "type": "String",
                "description": "Specifies the ranking order of results.",
                "required": false,
                "default": "latest"
              }
            ]
          },
          "since": {
            "value": "{{since}}",
            "placeholders": [
              {
                "name": "since",
                "type": "String",
                "description": "Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD).",
                "required": false
              }
            ]
          },
          "until": {
            "value": "{{until}}",
            "placeholders": [
              {
                "name": "until",
                "type": "String",
                "description": "Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD).",
                "required": false
              }
            ]
          },
          "mentions": {
            "value": "{{mentions}}",
            "placeholders": [
              {
                "name": "mentions",
                "type": "String",
                "description": "Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions.",
                "required": false
              }
            ]
          },
          "author": {
            "value": "{{author}}",
            "placeholders": [
              {
                "name": "author",
                "type": "String",
                "description": "Filter to posts by the given account. Handles are resolved to DID before query-time.",
                "required": false
              }
            ]
          },
          "lang": {
            "value": "{{lang}}",
            "placeholders": [
              {
                "name": "lang",
                "type": "String",
                "description": "Filter to posts in the given language. Expected to be based on post language field, though server may override language detection.",
                "required": false
              }
            ]
          },
          "domain": {
            "value": "{{domain}}",
            "placeholders": [
              {
                "name": "domain",
                "type": "String",
                "description": "Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization.",
                "required": false
              }
            ]
          },
          "url": {
            "value": "{{url}}",
            "placeholders": [
              {
                "name": "url",
                "type": "String",
                "description": "Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching.",
                "required": false
              }
            ]
          },
          "tag": {
            "value": "{{tag}}",
            "placeholders": [
              {
                "name": "tag",
                "type": "Integer",
                "description": "Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-feed-sendInteractions",
    "meta": {
      "short": "sendInteractions",
      "description": "Send information about interactions with feed items back to the feed generator that served them."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.feed.sendInteractions",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"feed\": \"{{feed}}\", \"interactions\": \"{{interactions}}\"}",
          "placeholders": [
            {
              "name": "feed",
              "type": "String",
              "description": "feed",
              "required": false
            },
            {
              "name": "interactions",
              "type": "Integer",
              "description": "interactions",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getActorStarterPacks",
    "meta": {
      "short": "getActorStarterPacks",
      "description": "Get a list of starter packs created by the actor."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getActorStarterPacks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "actor",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getBlocks",
    "meta": {
      "short": "getBlocks",
      "description": "Enumerates which accounts the requesting account is currently blocking. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getBlocks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getFollowers",
    "meta": {
      "short": "getFollowers",
      "description": "Enumerates accounts which follow a specified account (actor)."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getFollowers",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "actor",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getFollows",
    "meta": {
      "short": "getFollows",
      "description": "Enumerates accounts which a specified account (actor) follows."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getFollows",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "actor",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getKnownFollowers",
    "meta": {
      "short": "getKnownFollowers",
      "description": "Enumerates accounts which follow a specified account (actor) and are followed by the viewer."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getKnownFollowers",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "actor",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getList",
    "meta": {
      "short": "getList",
      "description": "Gets a 'view' (with additional context) of a specified list."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getList",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "list": {
            "value": "{{list}}",
            "placeholders": [
              {
                "name": "list",
                "type": "String",
                "description": "Reference (AT-URI) of the list record to hydrate.",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getListBlocks",
    "meta": {
      "short": "getListBlocks",
      "description": "Get mod lists that the requesting account (actor) is blocking. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getListBlocks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getListMutes",
    "meta": {
      "short": "getListMutes",
      "description": "Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getListMutes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getLists",
    "meta": {
      "short": "getLists",
      "description": "Enumerates the lists created by a specified account (actor)."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getLists",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "The account (actor) to enumerate lists from.",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          },
          "purposes": {
            "value": "{{purposes}}",
            "placeholders": [
              {
                "name": "purposes",
                "type": "Integer",
                "description": "Optional filter by list purpose. If not specified, all supported types are returned.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getListsWithMembership",
    "meta": {
      "short": "getListsWithMembership",
      "description": "Enumerates the lists created by the session user, and includes membership information about `actor` in those lists. Only supports curation and moderation lists (no reference lists, used in starter packs). Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getListsWithMembership",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "The account (actor) to check for membership.",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          },
          "purposes": {
            "value": "{{purposes}}",
            "placeholders": [
              {
                "name": "purposes",
                "type": "Integer",
                "description": "Optional filter by list purpose. If not specified, all supported types are returned.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getMutes",
    "meta": {
      "short": "getMutes",
      "description": "Enumerates accounts that the requesting account (actor) currently has muted. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getMutes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getRelationships",
    "meta": {
      "short": "getRelationships",
      "description": "Enumerates public relationships between one account, and a list of other accounts. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getRelationships",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "Primary account requesting relationships for.",
                "required": true
              }
            ]
          },
          "others": {
            "value": "{{others}}",
            "placeholders": [
              {
                "name": "others",
                "type": "Integer",
                "description": "List of 'other' accounts to be related back to the primary.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getStarterPack",
    "meta": {
      "short": "getStarterPack",
      "description": "Gets a view of a starter pack."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getStarterPack",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "starterPack": {
            "value": "{{starterPack}}",
            "placeholders": [
              {
                "name": "starterPack",
                "type": "String",
                "description": "Reference (AT-URI) of the starter pack record.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getStarterPacks",
    "meta": {
      "short": "getStarterPacks",
      "description": "Get views for a list of starter packs."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getStarterPacks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "uris": {
            "value": "{{uris}}",
            "placeholders": [
              {
                "name": "uris",
                "type": "Integer",
                "description": "uris",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getStarterPacksWithMembership",
    "meta": {
      "short": "getStarterPacksWithMembership",
      "description": "Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getStarterPacksWithMembership",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "The account (actor) to check for membership.",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-getSuggestedFollowsByActor",
    "meta": {
      "short": "getSuggestedFollowsByActor",
      "description": "Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.getSuggestedFollowsByActor",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "actor": {
            "value": "{{actor}}",
            "placeholders": [
              {
                "name": "actor",
                "type": "String",
                "description": "actor",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-muteActor",
    "meta": {
      "short": "muteActor",
      "description": "Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.muteActor",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"actor\": \"{{actor}}\"}",
          "placeholders": [
            {
              "name": "actor",
              "type": "String",
              "description": "actor",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-muteActorList",
    "meta": {
      "short": "muteActorList",
      "description": "Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.muteActorList",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"list\": \"{{list}}\"}",
          "placeholders": [
            {
              "name": "list",
              "type": "String",
              "description": "list",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-muteThread",
    "meta": {
      "short": "muteThread",
      "description": "Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.muteThread",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"root\": \"{{root}}\"}",
          "placeholders": [
            {
              "name": "root",
              "type": "String",
              "description": "root",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-searchStarterPacks",
    "meta": {
      "short": "searchStarterPacks",
      "description": "Find starter packs matching search criteria. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.searchStarterPacks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "q": {
            "value": "{{q}}",
            "placeholders": [
              {
                "name": "q",
                "type": "String",
                "description": "Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-unmuteActor",
    "meta": {
      "short": "unmuteActor",
      "description": "Unmutes the specified account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.unmuteActor",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"actor\": \"{{actor}}\"}",
          "placeholders": [
            {
              "name": "actor",
              "type": "String",
              "description": "actor",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-unmuteActorList",
    "meta": {
      "short": "unmuteActorList",
      "description": "Unmutes the specified list of accounts. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.unmuteActorList",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"list\": \"{{list}}\"}",
          "placeholders": [
            {
              "name": "list",
              "type": "String",
              "description": "list",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-graph-unmuteThread",
    "meta": {
      "short": "unmuteThread",
      "description": "Unmutes the specified thread. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.graph.unmuteThread",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"root\": \"{{root}}\"}",
          "placeholders": [
            {
              "name": "root",
              "type": "String",
              "description": "root",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-labeler-getServices",
    "meta": {
      "short": "getServices",
      "description": "Get information about a list of labeler services."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.labeler.getServices",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "dids": {
            "value": "{{dids}}",
            "placeholders": [
              {
                "name": "dids",
                "type": "Integer",
                "description": "dids",
                "required": true
              }
            ]
          },
          "detailed": {
            "value": "{{detailed}}",
            "placeholders": [
              {
                "name": "detailed",
                "type": "Integer",
                "description": "detailed",
                "required": false,
                "default": "False"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-getPreferences",
    "meta": {
      "short": "getPreferences",
      "description": "Get notification-related preferences for an account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.getPreferences",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-getUnreadCount",
    "meta": {
      "short": "getUnreadCount",
      "description": "Count the number of unread notifications for the requesting account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.getUnreadCount",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "priority": {
            "value": "{{priority}}",
            "placeholders": [
              {
                "name": "priority",
                "type": "Integer",
                "description": "priority",
                "required": false
              }
            ]
          },
          "seenAt": {
            "value": "{{seenAt}}",
            "placeholders": [
              {
                "name": "seenAt",
                "type": "String",
                "description": "seenAt",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-listActivitySubscriptions",
    "meta": {
      "short": "listActivitySubscriptions",
      "description": "Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.listActivitySubscriptions",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-listNotifications",
    "meta": {
      "short": "listNotifications",
      "description": "Enumerate notifications for the requesting account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.listNotifications",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "reasons": {
            "value": "{{reasons}}",
            "placeholders": [
              {
                "name": "reasons",
                "type": "Integer",
                "description": "Notification reasons to include in response.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "priority": {
            "value": "{{priority}}",
            "placeholders": [
              {
                "name": "priority",
                "type": "Integer",
                "description": "priority",
                "required": false
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          },
          "seenAt": {
            "value": "{{seenAt}}",
            "placeholders": [
              {
                "name": "seenAt",
                "type": "String",
                "description": "seenAt",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-putActivitySubscription",
    "meta": {
      "short": "putActivitySubscription",
      "description": "Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.putActivitySubscription",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"subject\": \"{{subject}}\", \"activitySubscription\": \"{{activitySubscription}}\"}",
          "placeholders": [
            {
              "name": "subject",
              "type": "String",
              "description": "subject",
              "required": true
            },
            {
              "name": "activitySubscription",
              "type": "Integer",
              "description": "activitySubscription",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-putPreferences",
    "meta": {
      "short": "putPreferences",
      "description": "Set notification-related preferences for an account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.putPreferences",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"priority\": \"{{priority}}\"}",
          "placeholders": [
            {
              "name": "priority",
              "type": "Integer",
              "description": "priority",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-putPreferencesV2",
    "meta": {
      "short": "putPreferencesV2",
      "description": "Set notification-related preferences for an account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.putPreferencesV2",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"chat\": \"{{chat}}\", \"follow\": \"{{follow}}\", \"like\": \"{{like}}\", \"likeViaRepost\": \"{{likeViaRepost}}\", \"mention\": \"{{mention}}\", \"quote\": \"{{quote}}\", \"reply\": \"{{reply}}\", \"repost\": \"{{repost}}\", \"repostViaRepost\": \"{{repostViaRepost}}\", \"starterpackJoined\": \"{{starterpackJoined}}\", \"subscribedPost\": \"{{subscribedPost}}\", \"unverified\": \"{{unverified}}\", \"verified\": \"{{verified}}\"}",
          "placeholders": [
            {
              "name": "chat",
              "type": "Integer",
              "description": "chat",
              "required": false
            },
            {
              "name": "follow",
              "type": "Integer",
              "description": "follow",
              "required": false
            },
            {
              "name": "like",
              "type": "Integer",
              "description": "like",
              "required": false
            },
            {
              "name": "likeViaRepost",
              "type": "Integer",
              "description": "likeViaRepost",
              "required": false
            },
            {
              "name": "mention",
              "type": "Integer",
              "description": "mention",
              "required": false
            },
            {
              "name": "quote",
              "type": "Integer",
              "description": "quote",
              "required": false
            },
            {
              "name": "reply",
              "type": "Integer",
              "description": "reply",
              "required": false
            },
            {
              "name": "repost",
              "type": "Integer",
              "description": "repost",
              "required": false
            },
            {
              "name": "repostViaRepost",
              "type": "Integer",
              "description": "repostViaRepost",
              "required": false
            },
            {
              "name": "starterpackJoined",
              "type": "Integer",
              "description": "starterpackJoined",
              "required": false
            },
            {
              "name": "subscribedPost",
              "type": "Integer",
              "description": "subscribedPost",
              "required": false
            },
            {
              "name": "unverified",
              "type": "Integer",
              "description": "unverified",
              "required": false
            },
            {
              "name": "verified",
              "type": "Integer",
              "description": "verified",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-registerPush",
    "meta": {
      "short": "registerPush",
      "description": "Register to receive push notifications, via a specified service, for the requesting account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.registerPush",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"serviceDid\": \"{{serviceDid}}\", \"token\": \"{{token}}\", \"platform\": \"{{platform}}\", \"appId\": \"{{appId}}\", \"ageRestricted\": \"{{ageRestricted}}\"}",
          "placeholders": [
            {
              "name": "serviceDid",
              "type": "String",
              "description": "serviceDid",
              "required": true
            },
            {
              "name": "token",
              "type": "String",
              "description": "token",
              "required": true
            },
            {
              "name": "platform",
              "type": "String",
              "description": "platform",
              "required": true
            },
            {
              "name": "appId",
              "type": "String",
              "description": "appId",
              "required": true
            },
            {
              "name": "ageRestricted",
              "type": "Integer",
              "description": "Set to true when the actor is age restricted",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-unregisterPush",
    "meta": {
      "short": "unregisterPush",
      "description": "The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.unregisterPush",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"serviceDid\": \"{{serviceDid}}\", \"token\": \"{{token}}\", \"platform\": \"{{platform}}\", \"appId\": \"{{appId}}\"}",
          "placeholders": [
            {
              "name": "serviceDid",
              "type": "String",
              "description": "serviceDid",
              "required": true
            },
            {
              "name": "token",
              "type": "String",
              "description": "token",
              "required": true
            },
            {
              "name": "platform",
              "type": "String",
              "description": "platform",
              "required": true
            },
            {
              "name": "appId",
              "type": "String",
              "description": "appId",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-notification-updateSeen",
    "meta": {
      "short": "updateSeen",
      "description": "Notify server that the requesting account has seen notifications. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.notification.updateSeen",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"seenAt\": \"{{seenAt}}\"}",
          "placeholders": [
            {
              "name": "seenAt",
              "type": "String",
              "description": "seenAt",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getAgeAssuranceState",
    "meta": {
      "short": "getAgeAssuranceState",
      "description": "Returns the current state of the age assurance process for an account. This is used to check if the user has completed age assurance or if further action is required."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getAgeAssuranceState",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getConfig",
    "meta": {
      "short": "getConfig",
      "description": "Get miscellaneous runtime configuration."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getConfig",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getOnboardingSuggestedStarterPacks",
    "meta": {
      "short": "getOnboardingSuggestedStarterPacks",
      "description": "Get a list of suggested starterpacks for onboarding"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getOnboardingSuggestedStarterPacks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getOnboardingSuggestedStarterPacksSkeleton",
    "meta": {
      "short": "getOnboardingSuggestedStarterPacksSkeleton",
      "description": "Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getOnboardingSuggestedStarterPacksSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries).",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getOnboardingSuggestedUsersSkeleton",
    "meta": {
      "short": "getOnboardingSuggestedUsersSkeleton",
      "description": "Get a skeleton of suggested users for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedOnboardingUsers"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getOnboardingSuggestedUsersSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries).",
                "required": false
              }
            ]
          },
          "category": {
            "value": "{{category}}",
            "placeholders": [
              {
                "name": "category",
                "type": "String",
                "description": "Category of users to get suggestions for.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getPopularFeedGenerators",
    "meta": {
      "short": "getPopularFeedGenerators",
      "description": "An unspecced view of globally popular feed generators."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getPopularFeedGenerators",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          },
          "query": {
            "value": "{{query}}",
            "placeholders": [
              {
                "name": "query",
                "type": "String",
                "description": "query",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getPostThreadOtherV2",
    "meta": {
      "short": "getPostThreadOtherV2",
      "description": "(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getPostThreadOtherV2",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "anchor": {
            "value": "{{anchor}}",
            "placeholders": [
              {
                "name": "anchor",
                "type": "String",
                "description": "Reference (AT-URI) to post record. This is the anchor post.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getPostThreadV2",
    "meta": {
      "short": "getPostThreadV2",
      "description": "(NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getPostThreadV2",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "anchor": {
            "value": "{{anchor}}",
            "placeholders": [
              {
                "name": "anchor",
                "type": "String",
                "description": "Reference (AT-URI) to post record. This is the anchor post, and the thread will be built around it. It can be any post in the tree, not necessarily a root post.",
                "required": true
              }
            ]
          },
          "above": {
            "value": "{{above}}",
            "placeholders": [
              {
                "name": "above",
                "type": "Integer",
                "description": "Whether to include parents above the anchor.",
                "required": false,
                "default": "True"
              }
            ]
          },
          "below": {
            "value": "{{below}}",
            "placeholders": [
              {
                "name": "below",
                "type": "Integer",
                "description": "How many levels of replies to include below the anchor.",
                "required": false,
                "default": "6"
              }
            ]
          },
          "branchingFactor": {
            "value": "{{branchingFactor}}",
            "placeholders": [
              {
                "name": "branchingFactor",
                "type": "Integer",
                "description": "Maximum of replies to include at each level of the thread, except for the direct replies to the anchor, which are (NOTE: currently, during unspecced phase) all returned (NOTE: later they might be paginated).",
                "required": false,
                "default": "10"
              }
            ]
          },
          "sort": {
            "value": "{{sort}}",
            "placeholders": [
              {
                "name": "sort",
                "type": "String",
                "description": "Sorting for the thread replies.",
                "required": false,
                "default": "oldest"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getSuggestedFeeds",
    "meta": {
      "short": "getSuggestedFeeds",
      "description": "Get a list of suggested feeds"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getSuggestedFeeds",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getSuggestedFeedsSkeleton",
    "meta": {
      "short": "getSuggestedFeedsSkeleton",
      "description": "Get a skeleton of suggested feeds. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedFeeds"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getSuggestedFeedsSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries).",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getSuggestedOnboardingUsers",
    "meta": {
      "short": "getSuggestedOnboardingUsers",
      "description": "Get a list of suggested users for onboarding"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getSuggestedOnboardingUsers",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "category": {
            "value": "{{category}}",
            "placeholders": [
              {
                "name": "category",
                "type": "String",
                "description": "Category of users to get suggestions for.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getSuggestedStarterPacks",
    "meta": {
      "short": "getSuggestedStarterPacks",
      "description": "Get a list of suggested starterpacks"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getSuggestedStarterPacks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getSuggestedStarterPacksSkeleton",
    "meta": {
      "short": "getSuggestedStarterPacksSkeleton",
      "description": "Get a skeleton of suggested starterpacks. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedStarterpacks"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getSuggestedStarterPacksSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries).",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getSuggestedUsers",
    "meta": {
      "short": "getSuggestedUsers",
      "description": "Get a list of suggested users"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getSuggestedUsers",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "category": {
            "value": "{{category}}",
            "placeholders": [
              {
                "name": "category",
                "type": "String",
                "description": "Category of users to get suggestions for.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getSuggestedUsersSkeleton",
    "meta": {
      "short": "getSuggestedUsersSkeleton",
      "description": "Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getSuggestedUsersSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries).",
                "required": false
              }
            ]
          },
          "category": {
            "value": "{{category}}",
            "placeholders": [
              {
                "name": "category",
                "type": "String",
                "description": "Category of users to get suggestions for.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getSuggestionsSkeleton",
    "meta": {
      "short": "getSuggestionsSkeleton",
      "description": "Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getSuggestionsSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          },
          "relativeToDid": {
            "value": "{{relativeToDid}}",
            "placeholders": [
              {
                "name": "relativeToDid",
                "type": "String",
                "description": "DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getTaggedSuggestions",
    "meta": {
      "short": "getTaggedSuggestions",
      "description": "Get a list of suggestions (feeds and users) tagged with categories"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getTaggedSuggestions",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getTrendingTopics",
    "meta": {
      "short": "getTrendingTopics",
      "description": "Get a list of trending topics"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getTrendingTopics",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getTrends",
    "meta": {
      "short": "getTrends",
      "description": "Get the current trends on the network"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getTrends",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-getTrendsSkeleton",
    "meta": {
      "short": "getTrendsSkeleton",
      "description": "Get the skeleton of trends on the network. Intended to be called and then hydrated through app.bsky.unspecced.getTrends"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.getTrendsSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries).",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "10"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-initAgeAssurance",
    "meta": {
      "short": "initAgeAssurance",
      "description": "Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.initAgeAssurance",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"email\": \"{{email}}\", \"language\": \"{{language}}\", \"countryCode\": \"{{countryCode}}\"}",
          "placeholders": [
            {
              "name": "email",
              "type": "String",
              "description": "The user's email address to receive assurance instructions.",
              "required": true
            },
            {
              "name": "language",
              "type": "String",
              "description": "The user's preferred language for communication during the assurance process.",
              "required": true
            },
            {
              "name": "countryCode",
              "type": "String",
              "description": "An ISO 3166-1 alpha-2 code of the user's location.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-searchActorsSkeleton",
    "meta": {
      "short": "searchActorsSkeleton",
      "description": "Backend Actors (profile) search, returns only skeleton."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.searchActorsSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "q": {
            "value": "{{q}}",
            "placeholders": [
              {
                "name": "q",
                "type": "String",
                "description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax.",
                "required": true
              }
            ]
          },
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking.",
                "required": false
              }
            ]
          },
          "typeahead": {
            "value": "{{typeahead}}",
            "placeholders": [
              {
                "name": "typeahead",
                "type": "Integer",
                "description": "If true, acts as fast/simple 'typeahead' query.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-searchPostsSkeleton",
    "meta": {
      "short": "searchPostsSkeleton",
      "description": "Backend Posts search, returns only skeleton"
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.searchPostsSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "q": {
            "value": "{{q}}",
            "placeholders": [
              {
                "name": "q",
                "type": "String",
                "description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.",
                "required": true
              }
            ]
          },
          "sort": {
            "value": "{{sort}}",
            "placeholders": [
              {
                "name": "sort",
                "type": "String",
                "description": "Specifies the ranking order of results.",
                "required": false,
                "default": "latest"
              }
            ]
          },
          "since": {
            "value": "{{since}}",
            "placeholders": [
              {
                "name": "since",
                "type": "String",
                "description": "Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD).",
                "required": false
              }
            ]
          },
          "until": {
            "value": "{{until}}",
            "placeholders": [
              {
                "name": "until",
                "type": "String",
                "description": "Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD).",
                "required": false
              }
            ]
          },
          "mentions": {
            "value": "{{mentions}}",
            "placeholders": [
              {
                "name": "mentions",
                "type": "String",
                "description": "Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions.",
                "required": false
              }
            ]
          },
          "author": {
            "value": "{{author}}",
            "placeholders": [
              {
                "name": "author",
                "type": "String",
                "description": "Filter to posts by the given account. Handles are resolved to DID before query-time.",
                "required": false
              }
            ]
          },
          "lang": {
            "value": "{{lang}}",
            "placeholders": [
              {
                "name": "lang",
                "type": "String",
                "description": "Filter to posts in the given language. Expected to be based on post language field, though server may override language detection.",
                "required": false
              }
            ]
          },
          "domain": {
            "value": "{{domain}}",
            "placeholders": [
              {
                "name": "domain",
                "type": "String",
                "description": "Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization.",
                "required": false
              }
            ]
          },
          "url": {
            "value": "{{url}}",
            "placeholders": [
              {
                "name": "url",
                "type": "String",
                "description": "Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching.",
                "required": false
              }
            ]
          },
          "tag": {
            "value": "{{tag}}",
            "placeholders": [
              {
                "name": "tag",
                "type": "Integer",
                "description": "Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching.",
                "required": false
              }
            ]
          },
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-unspecced-searchStarterPacksSkeleton",
    "meta": {
      "short": "searchStarterPacksSkeleton",
      "description": "Backend Starter Pack search, returns only skeleton."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.unspecced.searchStarterPacksSkeleton",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "q": {
            "value": "{{q}}",
            "placeholders": [
              {
                "name": "q",
                "type": "String",
                "description": "Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.",
                "required": true
              }
            ]
          },
          "viewer": {
            "value": "{{viewer}}",
            "placeholders": [
              {
                "name": "viewer",
                "type": "String",
                "description": "DID of the account making the request (not included for public/unauthenticated queries).",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "25"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "Optional pagination mechanism; may not necessarily allow scrolling through entire result set.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-video-getJobStatus",
    "meta": {
      "short": "getJobStatus",
      "description": "Get status details for a video processing job."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.video.getJobStatus",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "jobId": {
            "value": "{{jobId}}",
            "placeholders": [
              {
                "name": "jobId",
                "type": "String",
                "description": "jobId",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-video-getUploadLimits",
    "meta": {
      "short": "getUploadLimits",
      "description": "Get video upload limits for the authenticated user."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.video.getUploadLimits",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "app-bsky-video-uploadVideo",
    "meta": {
      "short": "uploadVideo",
      "description": "Upload a video to be processed then stored on the PDS."
    },
    "endpoint": {
      "value": "/xrpc/app.bsky.video.uploadVideo",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-deleteAccount",
    "meta": {
      "short": "deleteAccount",
      "description": "Delete a user account as an administrator."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.deleteAccount",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"did\": \"{{did}}\"}",
          "placeholders": [
            {
              "name": "did",
              "type": "String",
              "description": "did",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-disableAccountInvites",
    "meta": {
      "short": "disableAccountInvites",
      "description": "Disable an account from receiving new invite codes, but does not invalidate existing codes."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.disableAccountInvites",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"account\": \"{{account}}\", \"note\": \"{{note}}\"}",
          "placeholders": [
            {
              "name": "account",
              "type": "String",
              "description": "account",
              "required": true
            },
            {
              "name": "note",
              "type": "String",
              "description": "Optional reason for disabled invites.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-disableInviteCodes",
    "meta": {
      "short": "disableInviteCodes",
      "description": "Disable some set of codes and/or all codes associated with a set of users."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.disableInviteCodes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"codes\": \"{{codes}}\", \"accounts\": \"{{accounts}}\"}",
          "placeholders": [
            {
              "name": "codes",
              "type": "Integer",
              "description": "codes",
              "required": false
            },
            {
              "name": "accounts",
              "type": "Integer",
              "description": "accounts",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-enableAccountInvites",
    "meta": {
      "short": "enableAccountInvites",
      "description": "Re-enable an account's ability to receive invite codes."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.enableAccountInvites",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"account\": \"{{account}}\", \"note\": \"{{note}}\"}",
          "placeholders": [
            {
              "name": "account",
              "type": "String",
              "description": "account",
              "required": true
            },
            {
              "name": "note",
              "type": "String",
              "description": "Optional reason for enabled invites.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-getAccountInfo",
    "meta": {
      "short": "getAccountInfo",
      "description": "Get details about an account."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.getAccountInfo",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "did",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-getAccountInfos",
    "meta": {
      "short": "getAccountInfos",
      "description": "Get details about some accounts."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.getAccountInfos",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "dids": {
            "value": "{{dids}}",
            "placeholders": [
              {
                "name": "dids",
                "type": "Integer",
                "description": "dids",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-getInviteCodes",
    "meta": {
      "short": "getInviteCodes",
      "description": "Get an admin view of invite codes."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.getInviteCodes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "sort": {
            "value": "{{sort}}",
            "placeholders": [
              {
                "name": "sort",
                "type": "String",
                "description": "sort",
                "required": false,
                "default": "recent"
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "100"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-getSubjectStatus",
    "meta": {
      "short": "getSubjectStatus",
      "description": "Get the service-specific admin status of a subject (account, record, or blob)."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.getSubjectStatus",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "did",
                "required": false
              }
            ]
          },
          "uri": {
            "value": "{{uri}}",
            "placeholders": [
              {
                "name": "uri",
                "type": "String",
                "description": "uri",
                "required": false
              }
            ]
          },
          "blob": {
            "value": "{{blob}}",
            "placeholders": [
              {
                "name": "blob",
                "type": "String",
                "description": "blob",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-searchAccounts",
    "meta": {
      "short": "searchAccounts",
      "description": "Get list of accounts that matches your search query."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.searchAccounts",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "email": {
            "value": "{{email}}",
            "placeholders": [
              {
                "name": "email",
                "type": "String",
                "description": "email",
                "required": false
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-sendEmail",
    "meta": {
      "short": "sendEmail",
      "description": "Send email to a user's account email address."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.sendEmail",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"recipientDid\": \"{{recipientDid}}\", \"content\": \"{{content}}\", \"subject\": \"{{subject}}\", \"senderDid\": \"{{senderDid}}\", \"comment\": \"{{comment}}\"}",
          "placeholders": [
            {
              "name": "recipientDid",
              "type": "String",
              "description": "recipientDid",
              "required": true
            },
            {
              "name": "content",
              "type": "String",
              "description": "content",
              "required": true
            },
            {
              "name": "subject",
              "type": "String",
              "description": "subject",
              "required": false
            },
            {
              "name": "senderDid",
              "type": "String",
              "description": "senderDid",
              "required": true
            },
            {
              "name": "comment",
              "type": "String",
              "description": "Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-updateAccountEmail",
    "meta": {
      "short": "updateAccountEmail",
      "description": "Administrative action to update an account's email."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.updateAccountEmail",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"account\": \"{{account}}\", \"email\": \"{{email}}\"}",
          "placeholders": [
            {
              "name": "account",
              "type": "String",
              "description": "The handle or DID of the repo.",
              "required": true
            },
            {
              "name": "email",
              "type": "String",
              "description": "email",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-updateAccountHandle",
    "meta": {
      "short": "updateAccountHandle",
      "description": "Administrative action to update an account's handle."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.updateAccountHandle",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"did\": \"{{did}}\", \"handle\": \"{{handle}}\"}",
          "placeholders": [
            {
              "name": "did",
              "type": "String",
              "description": "did",
              "required": true
            },
            {
              "name": "handle",
              "type": "String",
              "description": "handle",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-updateAccountPassword",
    "meta": {
      "short": "updateAccountPassword",
      "description": "Update the password for a user account as an administrator."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.updateAccountPassword",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"did\": \"{{did}}\", \"password\": \"{{password}}\"}",
          "placeholders": [
            {
              "name": "did",
              "type": "String",
              "description": "did",
              "required": true
            },
            {
              "name": "password",
              "type": "String",
              "description": "password",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-updateAccountSigningKey",
    "meta": {
      "short": "updateAccountSigningKey",
      "description": "Administrative action to update an account's signing key in their Did document."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.updateAccountSigningKey",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"did\": \"{{did}}\", \"signingKey\": \"{{signingKey}}\"}",
          "placeholders": [
            {
              "name": "did",
              "type": "String",
              "description": "did",
              "required": true
            },
            {
              "name": "signingKey",
              "type": "String",
              "description": "Did-key formatted public key",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-admin-updateSubjectStatus",
    "meta": {
      "short": "updateSubjectStatus",
      "description": "Update the service-specific admin status of a subject (account, record, or blob)."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.admin.updateSubjectStatus",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"subject\": \"{{subject}}\", \"takedown\": \"{{takedown}}\", \"deactivated\": \"{{deactivated}}\"}",
          "placeholders": [
            {
              "name": "subject",
              "type": "Integer",
              "description": "subject",
              "required": true
            },
            {
              "name": "takedown",
              "type": "Integer",
              "description": "takedown",
              "required": false
            },
            {
              "name": "deactivated",
              "type": "Integer",
              "description": "deactivated",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-getRecommendedDidCredentials",
    "meta": {
      "short": "getRecommendedDidCredentials",
      "description": "Describe the credentials that should be included in the DID doc of an account that is migrating to this service."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.getRecommendedDidCredentials",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-refreshIdentity",
    "meta": {
      "short": "refreshIdentity",
      "description": "Request that the server re-resolve an identity (DID and handle). The server may ignore this request, or require authentication, depending on the role, implementation, and policy of the server."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.refreshIdentity",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"identifier\": \"{{identifier}}\"}",
          "placeholders": [
            {
              "name": "identifier",
              "type": "String",
              "description": "identifier",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-requestPlcOperationSignature",
    "meta": {
      "short": "requestPlcOperationSignature",
      "description": "Request an email with a code to in order to request a signed PLC operation. Requires Auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.requestPlcOperationSignature",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-resolveDid",
    "meta": {
      "short": "resolveDid",
      "description": "Resolves DID to DID document. Does not bi-directionally verify handle."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.resolveDid",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "DID to resolve.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-resolveHandle",
    "meta": {
      "short": "resolveHandle",
      "description": "Resolves an atproto handle (hostname) to a DID. Does not necessarily bi-directionally verify against the the DID document."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.resolveHandle",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "handle": {
            "value": "{{handle}}",
            "placeholders": [
              {
                "name": "handle",
                "type": "String",
                "description": "The handle to resolve.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-resolveIdentity",
    "meta": {
      "short": "resolveIdentity",
      "description": "Resolves an identity (DID or Handle) to a full identity (DID document and verified handle)."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.resolveIdentity",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "identifier": {
            "value": "{{identifier}}",
            "placeholders": [
              {
                "name": "identifier",
                "type": "String",
                "description": "Handle or DID to resolve.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-signPlcOperation",
    "meta": {
      "short": "signPlcOperation",
      "description": "Signs a PLC operation to update some value(s) in the requesting DID's document."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.signPlcOperation",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"token\": \"{{token}}\", \"rotationKeys\": \"{{rotationKeys}}\", \"alsoKnownAs\": \"{{alsoKnownAs}}\", \"verificationMethods\": \"{{verificationMethods}}\", \"services\": \"{{services}}\"}",
          "placeholders": [
            {
              "name": "token",
              "type": "String",
              "description": "A token received through com.atproto.identity.requestPlcOperationSignature",
              "required": false
            },
            {
              "name": "rotationKeys",
              "type": "Integer",
              "description": "rotationKeys",
              "required": false
            },
            {
              "name": "alsoKnownAs",
              "type": "Integer",
              "description": "alsoKnownAs",
              "required": false
            },
            {
              "name": "verificationMethods",
              "type": "Integer",
              "description": "verificationMethods",
              "required": false
            },
            {
              "name": "services",
              "type": "Integer",
              "description": "services",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-submitPlcOperation",
    "meta": {
      "short": "submitPlcOperation",
      "description": "Validates a PLC operation to ensure that it doesn't violate a service's constraints or get the identity into a bad state, then submits it to the PLC registry"
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.submitPlcOperation",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"operation\": \"{{operation}}\"}",
          "placeholders": [
            {
              "name": "operation",
              "type": "Integer",
              "description": "operation",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-identity-updateHandle",
    "meta": {
      "short": "updateHandle",
      "description": "Updates the current account's handle. Verifies handle validity, and updates did:plc document if necessary. Implemented by PDS, and requires auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.identity.updateHandle",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"handle\": \"{{handle}}\"}",
          "placeholders": [
            {
              "name": "handle",
              "type": "String",
              "description": "The new handle.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-label-queryLabels",
    "meta": {
      "short": "queryLabels",
      "description": "Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.label.queryLabels",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "uriPatterns": {
            "value": "{{uriPatterns}}",
            "placeholders": [
              {
                "name": "uriPatterns",
                "type": "Integer",
                "description": "List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI.",
                "required": true
              }
            ]
          },
          "sources": {
            "value": "{{sources}}",
            "placeholders": [
              {
                "name": "sources",
                "type": "Integer",
                "description": "Optional list of label sources (DIDs) to filter on.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-lexicon-resolveLexicon",
    "meta": {
      "short": "resolveLexicon",
      "description": "Resolves an atproto lexicon (NSID) to a schema."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.lexicon.resolveLexicon",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "nsid": {
            "value": "{{nsid}}",
            "placeholders": [
              {
                "name": "nsid",
                "type": "String",
                "description": "The lexicon NSID to resolve.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-moderation-createReport",
    "meta": {
      "short": "createReport",
      "description": "Submit a moderation report regarding an atproto account or record. Implemented by moderation services (with PDS proxying), and requires auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.moderation.createReport",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"reasonType\": \"{{reasonType}}\", \"reason\": \"{{reason}}\", \"subject\": \"{{subject}}\", \"modTool\": \"{{modTool}}\"}",
          "placeholders": [
            {
              "name": "reasonType",
              "type": "Integer",
              "description": "Indicates the broad category of violation the report is for.",
              "required": true
            },
            {
              "name": "reason",
              "type": "String",
              "description": "Additional context about the content and violation.",
              "required": false
            },
            {
              "name": "subject",
              "type": "Integer",
              "description": "subject",
              "required": true
            },
            {
              "name": "modTool",
              "type": "Integer",
              "description": "modTool",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-applyWrites",
    "meta": {
      "short": "applyWrites",
      "description": "Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.applyWrites",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"repo\": \"{{repo}}\", \"validate\": \"{{validate}}\", \"writes\": \"{{writes}}\", \"swapCommit\": \"{{swapCommit}}\"}",
          "placeholders": [
            {
              "name": "repo",
              "type": "String",
              "description": "The handle or DID of the repo (aka, current account).",
              "required": true
            },
            {
              "name": "validate",
              "type": "Integer",
              "description": "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons.",
              "required": false
            },
            {
              "name": "writes",
              "type": "Integer",
              "description": "writes",
              "required": true
            },
            {
              "name": "swapCommit",
              "type": "String",
              "description": "If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-createRecord",
    "meta": {
      "short": "createRecord",
      "description": "Create a single new repository record. Requires auth, implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.createRecord",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"repo\": \"{{repo}}\", \"collection\": \"{{collection}}\", \"rkey\": \"{{rkey}}\", \"validate\": \"{{validate}}\", \"record\": \"{{record}}\", \"swapCommit\": \"{{swapCommit}}\"}",
          "placeholders": [
            {
              "name": "repo",
              "type": "String",
              "description": "The handle or DID of the repo (aka, current account).",
              "required": true
            },
            {
              "name": "collection",
              "type": "String",
              "description": "The NSID of the record collection.",
              "required": true
            },
            {
              "name": "rkey",
              "type": "String",
              "description": "The Record Key.",
              "required": false
            },
            {
              "name": "validate",
              "type": "Integer",
              "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.",
              "required": false
            },
            {
              "name": "record",
              "type": "Integer",
              "description": "The record itself. Must contain a $type field.",
              "required": true
            },
            {
              "name": "swapCommit",
              "type": "String",
              "description": "Compare and swap with the previous commit by CID.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-deleteRecord",
    "meta": {
      "short": "deleteRecord",
      "description": "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.deleteRecord",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"repo\": \"{{repo}}\", \"collection\": \"{{collection}}\", \"rkey\": \"{{rkey}}\", \"swapRecord\": \"{{swapRecord}}\", \"swapCommit\": \"{{swapCommit}}\"}",
          "placeholders": [
            {
              "name": "repo",
              "type": "String",
              "description": "The handle or DID of the repo (aka, current account).",
              "required": true
            },
            {
              "name": "collection",
              "type": "String",
              "description": "The NSID of the record collection.",
              "required": true
            },
            {
              "name": "rkey",
              "type": "String",
              "description": "The Record Key.",
              "required": true
            },
            {
              "name": "swapRecord",
              "type": "String",
              "description": "Compare and swap with the previous record by CID.",
              "required": false
            },
            {
              "name": "swapCommit",
              "type": "String",
              "description": "Compare and swap with the previous commit by CID.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-describeRepo",
    "meta": {
      "short": "describeRepo",
      "description": "Get information about an account and repository, including the list of collections. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.describeRepo",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "repo": {
            "value": "{{repo}}",
            "placeholders": [
              {
                "name": "repo",
                "type": "String",
                "description": "The handle or DID of the repo.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-getRecord",
    "meta": {
      "short": "getRecord",
      "description": "Get a single record from a repository. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.getRecord",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "repo": {
            "value": "{{repo}}",
            "placeholders": [
              {
                "name": "repo",
                "type": "String",
                "description": "The handle or DID of the repo.",
                "required": true
              }
            ]
          },
          "collection": {
            "value": "{{collection}}",
            "placeholders": [
              {
                "name": "collection",
                "type": "String",
                "description": "The NSID of the record collection.",
                "required": true
              }
            ]
          },
          "rkey": {
            "value": "{{rkey}}",
            "placeholders": [
              {
                "name": "rkey",
                "type": "String",
                "description": "The Record Key.",
                "required": true
              }
            ]
          },
          "cid": {
            "value": "{{cid}}",
            "placeholders": [
              {
                "name": "cid",
                "type": "String",
                "description": "The CID of the version of the record. If not specified, then return the most recent version.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-importRepo",
    "meta": {
      "short": "importRepo",
      "description": "Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.importRepo",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-listMissingBlobs",
    "meta": {
      "short": "listMissingBlobs",
      "description": "Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.listMissingBlobs",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "500"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-listRecords",
    "meta": {
      "short": "listRecords",
      "description": "List a range of records in a repository, matching a specific collection. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.listRecords",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "repo": {
            "value": "{{repo}}",
            "placeholders": [
              {
                "name": "repo",
                "type": "String",
                "description": "The handle or DID of the repo.",
                "required": true
              }
            ]
          },
          "collection": {
            "value": "{{collection}}",
            "placeholders": [
              {
                "name": "collection",
                "type": "String",
                "description": "The NSID of the record type.",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "The number of records to return.",
                "required": false,
                "default": "50"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          },
          "reverse": {
            "value": "{{reverse}}",
            "placeholders": [
              {
                "name": "reverse",
                "type": "Integer",
                "description": "Flag to reverse the order of the returned records.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-putRecord",
    "meta": {
      "short": "putRecord",
      "description": "Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.putRecord",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"repo\": \"{{repo}}\", \"collection\": \"{{collection}}\", \"rkey\": \"{{rkey}}\", \"validate\": \"{{validate}}\", \"record\": \"{{record}}\", \"swapRecord\": \"{{swapRecord}}\", \"swapCommit\": \"{{swapCommit}}\"}",
          "placeholders": [
            {
              "name": "repo",
              "type": "String",
              "description": "The handle or DID of the repo (aka, current account).",
              "required": true
            },
            {
              "name": "collection",
              "type": "String",
              "description": "The NSID of the record collection.",
              "required": true
            },
            {
              "name": "rkey",
              "type": "String",
              "description": "The Record Key.",
              "required": true
            },
            {
              "name": "validate",
              "type": "Integer",
              "description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.",
              "required": false
            },
            {
              "name": "record",
              "type": "Integer",
              "description": "The record to write.",
              "required": true
            },
            {
              "name": "swapRecord",
              "type": "String",
              "description": "Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation",
              "required": false
            },
            {
              "name": "swapCommit",
              "type": "String",
              "description": "Compare and swap with the previous commit by CID.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-repo-uploadBlob",
    "meta": {
      "short": "uploadBlob",
      "description": "Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.repo.uploadBlob",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-activateAccount",
    "meta": {
      "short": "activateAccount",
      "description": "Activates a currently deactivated account. Used to finalize account migration after the account's repo is imported and identity is setup."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.activateAccount",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-checkAccountStatus",
    "meta": {
      "short": "checkAccountStatus",
      "description": "Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.checkAccountStatus",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-confirmEmail",
    "meta": {
      "short": "confirmEmail",
      "description": "Confirm an email using a token from com.atproto.server.requestEmailConfirmation."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.confirmEmail",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"email\": \"{{email}}\", \"token\": \"{{token}}\"}",
          "placeholders": [
            {
              "name": "email",
              "type": "String",
              "description": "email",
              "required": true
            },
            {
              "name": "token",
              "type": "String",
              "description": "token",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-createAccount",
    "meta": {
      "short": "createAccount",
      "description": "Create an account. Implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.createAccount",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"email\": \"{{email}}\", \"handle\": \"{{handle}}\", \"did\": \"{{did}}\", \"inviteCode\": \"{{inviteCode}}\", \"verificationCode\": \"{{verificationCode}}\", \"verificationPhone\": \"{{verificationPhone}}\", \"password\": \"{{password}}\", \"recoveryKey\": \"{{recoveryKey}}\", \"plcOp\": \"{{plcOp}}\"}",
          "placeholders": [
            {
              "name": "email",
              "type": "String",
              "description": "email",
              "required": false
            },
            {
              "name": "handle",
              "type": "String",
              "description": "Requested handle for the account.",
              "required": true
            },
            {
              "name": "did",
              "type": "String",
              "description": "Pre-existing atproto DID, being imported to a new account.",
              "required": false
            },
            {
              "name": "inviteCode",
              "type": "String",
              "description": "inviteCode",
              "required": false
            },
            {
              "name": "verificationCode",
              "type": "String",
              "description": "verificationCode",
              "required": false
            },
            {
              "name": "verificationPhone",
              "type": "String",
              "description": "verificationPhone",
              "required": false
            },
            {
              "name": "password",
              "type": "String",
              "description": "Initial account password. May need to meet instance-specific password strength requirements.",
              "required": false
            },
            {
              "name": "recoveryKey",
              "type": "String",
              "description": "DID PLC rotation key (aka, recovery key) to be included in PLC creation operation.",
              "required": false
            },
            {
              "name": "plcOp",
              "type": "Integer",
              "description": "A signed DID PLC operation to be submitted as part of importing an existing account to this instance. NOTE: this optional field may be updated when full account migration is implemented.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-createAppPassword",
    "meta": {
      "short": "createAppPassword",
      "description": "Create an App Password."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.createAppPassword",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\", \"privileged\": \"{{privileged}}\"}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "A short name for the App Password, to help distinguish them.",
              "required": true
            },
            {
              "name": "privileged",
              "type": "Integer",
              "description": "If an app password has 'privileged' access to possibly sensitive account state. Meant for use with trusted clients.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-createInviteCode",
    "meta": {
      "short": "createInviteCode",
      "description": "Create an invite code."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.createInviteCode",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"useCount\": \"{{useCount}}\", \"forAccount\": \"{{forAccount}}\"}",
          "placeholders": [
            {
              "name": "useCount",
              "type": "Integer",
              "description": "useCount",
              "required": true
            },
            {
              "name": "forAccount",
              "type": "String",
              "description": "forAccount",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-createInviteCodes",
    "meta": {
      "short": "createInviteCodes",
      "description": "Create invite codes."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.createInviteCodes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"codeCount\": \"{{codeCount}}\", \"useCount\": \"{{useCount}}\", \"forAccounts\": \"{{forAccounts}}\"}",
          "placeholders": [
            {
              "name": "codeCount",
              "type": "Integer",
              "description": "codeCount",
              "required": true
            },
            {
              "name": "useCount",
              "type": "Integer",
              "description": "useCount",
              "required": true
            },
            {
              "name": "forAccounts",
              "type": "Integer",
              "description": "forAccounts",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-createSession",
    "meta": {
      "short": "createSession",
      "description": "Create an authentication session."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.createSession",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"identifier\": \"{{identifier}}\", \"password\": \"{{password}}\", \"authFactorToken\": \"{{authFactorToken}}\", \"allowTakendown\": \"{{allowTakendown}}\"}",
          "placeholders": [
            {
              "name": "identifier",
              "type": "String",
              "description": "Handle or other identifier supported by the server for the authenticating user.",
              "required": true
            },
            {
              "name": "password",
              "type": "String",
              "description": "password",
              "required": true
            },
            {
              "name": "authFactorToken",
              "type": "String",
              "description": "authFactorToken",
              "required": false
            },
            {
              "name": "allowTakendown",
              "type": "Integer",
              "description": "When true, instead of throwing error for takendown accounts, a valid response with a narrow scoped token will be returned",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-deactivateAccount",
    "meta": {
      "short": "deactivateAccount",
      "description": "Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.deactivateAccount",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"deleteAfter\": \"{{deleteAfter}}\"}",
          "placeholders": [
            {
              "name": "deleteAfter",
              "type": "String",
              "description": "A recommendation to server as to how long they should hold onto the deactivated account before deleting.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-deleteAccount",
    "meta": {
      "short": "deleteAccount",
      "description": "Delete an actor's account with a token and password. Can only be called after requesting a deletion token. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.deleteAccount",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"did\": \"{{did}}\", \"password\": \"{{password}}\", \"token\": \"{{token}}\"}",
          "placeholders": [
            {
              "name": "did",
              "type": "String",
              "description": "did",
              "required": true
            },
            {
              "name": "password",
              "type": "String",
              "description": "password",
              "required": true
            },
            {
              "name": "token",
              "type": "String",
              "description": "token",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-deleteSession",
    "meta": {
      "short": "deleteSession",
      "description": "Delete the current session. Requires auth using the 'refreshJwt' (not the 'accessJwt')."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.deleteSession",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-describeServer",
    "meta": {
      "short": "describeServer",
      "description": "Describes the server's account creation requirements and capabilities. Implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.describeServer",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-getAccountInviteCodes",
    "meta": {
      "short": "getAccountInviteCodes",
      "description": "Get all invite codes for the current account. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.getAccountInviteCodes",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "includeUsed": {
            "value": "{{includeUsed}}",
            "placeholders": [
              {
                "name": "includeUsed",
                "type": "Integer",
                "description": "includeUsed",
                "required": false,
                "default": "True"
              }
            ]
          },
          "createAvailable": {
            "value": "{{createAvailable}}",
            "placeholders": [
              {
                "name": "createAvailable",
                "type": "Integer",
                "description": "Controls whether any new 'earned' but not 'created' invites should be created.",
                "required": false,
                "default": "True"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-getServiceAuth",
    "meta": {
      "short": "getServiceAuth",
      "description": "Get a signed token on behalf of the requesting DID for the requested service."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.getServiceAuth",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "aud": {
            "value": "{{aud}}",
            "placeholders": [
              {
                "name": "aud",
                "type": "String",
                "description": "The DID of the service that the token will be used to authenticate with",
                "required": true
              }
            ]
          },
          "exp": {
            "value": "{{exp}}",
            "placeholders": [
              {
                "name": "exp",
                "type": "Integer",
                "description": "The time in Unix Epoch seconds that the JWT expires. Defaults to 60 seconds in the future. The service may enforce certain time bounds on tokens depending on the requested scope.",
                "required": false
              }
            ]
          },
          "lxm": {
            "value": "{{lxm}}",
            "placeholders": [
              {
                "name": "lxm",
                "type": "String",
                "description": "Lexicon (XRPC) method to bind the requested token to",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-getSession",
    "meta": {
      "short": "getSession",
      "description": "Get information about the current auth session. Requires auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.getSession",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-listAppPasswords",
    "meta": {
      "short": "listAppPasswords",
      "description": "List all App Passwords."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.listAppPasswords",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-refreshSession",
    "meta": {
      "short": "refreshSession",
      "description": "Refresh an authentication session. Requires auth using the 'refreshJwt' (not the 'accessJwt')."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.refreshSession",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-requestAccountDelete",
    "meta": {
      "short": "requestAccountDelete",
      "description": "Initiate a user account deletion via email."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.requestAccountDelete",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-requestEmailConfirmation",
    "meta": {
      "short": "requestEmailConfirmation",
      "description": "Request an email with a code to confirm ownership of email."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.requestEmailConfirmation",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-requestEmailUpdate",
    "meta": {
      "short": "requestEmailUpdate",
      "description": "Request a token in order to update email."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.requestEmailUpdate",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-requestPasswordReset",
    "meta": {
      "short": "requestPasswordReset",
      "description": "Initiate a user account password reset via email."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.requestPasswordReset",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"email\": \"{{email}}\"}",
          "placeholders": [
            {
              "name": "email",
              "type": "String",
              "description": "email",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-reserveSigningKey",
    "meta": {
      "short": "reserveSigningKey",
      "description": "Reserve a repo signing key, for use with account creation. Necessary so that a DID PLC update operation can be constructed during an account migraiton. Public and does not require auth; implemented by PDS. NOTE: this endpoint may change when full account migration is implemented."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.reserveSigningKey",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"did\": \"{{did}}\"}",
          "placeholders": [
            {
              "name": "did",
              "type": "String",
              "description": "The DID to reserve a key for.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-resetPassword",
    "meta": {
      "short": "resetPassword",
      "description": "Reset a user account password using a token."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.resetPassword",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"token\": \"{{token}}\", \"password\": \"{{password}}\"}",
          "placeholders": [
            {
              "name": "token",
              "type": "String",
              "description": "token",
              "required": true
            },
            {
              "name": "password",
              "type": "String",
              "description": "password",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-revokeAppPassword",
    "meta": {
      "short": "revokeAppPassword",
      "description": "Revoke an App Password by name."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.revokeAppPassword",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\"}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "name",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-server-updateEmail",
    "meta": {
      "short": "updateEmail",
      "description": "Update an account's email."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.server.updateEmail",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"email\": \"{{email}}\", \"emailAuthFactor\": \"{{emailAuthFactor}}\", \"token\": \"{{token}}\"}",
          "placeholders": [
            {
              "name": "email",
              "type": "String",
              "description": "email",
              "required": true
            },
            {
              "name": "emailAuthFactor",
              "type": "Integer",
              "description": "emailAuthFactor",
              "required": false
            },
            {
              "name": "token",
              "type": "String",
              "description": "Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed.",
              "required": false
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getBlob",
    "meta": {
      "short": "getBlob",
      "description": "Get a blob associated with a given account. Returns the full blob as originally uploaded. Does not require auth; implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getBlob",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the account.",
                "required": true
              }
            ]
          },
          "cid": {
            "value": "{{cid}}",
            "placeholders": [
              {
                "name": "cid",
                "type": "String",
                "description": "The CID of the blob to fetch",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getBlocks",
    "meta": {
      "short": "getBlocks",
      "description": "Get data blocks from a given repo, by CID. For example, intermediate MST nodes, or records. Does not require auth; implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getBlocks",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the repo.",
                "required": true
              }
            ]
          },
          "cids": {
            "value": "{{cids}}",
            "placeholders": [
              {
                "name": "cids",
                "type": "Integer",
                "description": "cids",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getCheckout",
    "meta": {
      "short": "getCheckout",
      "description": "DEPRECATED - please use com.atproto.sync.getRepo instead"
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getCheckout",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the repo.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getHead",
    "meta": {
      "short": "getHead",
      "description": "DEPRECATED - please use com.atproto.sync.getLatestCommit instead"
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getHead",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the repo.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getHostStatus",
    "meta": {
      "short": "getHostStatus",
      "description": "Returns information about a specified upstream host, as consumed by the server. Implemented by relays."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getHostStatus",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "hostname": {
            "value": "{{hostname}}",
            "placeholders": [
              {
                "name": "hostname",
                "type": "String",
                "description": "Hostname of the host (eg, PDS or relay) being queried.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getLatestCommit",
    "meta": {
      "short": "getLatestCommit",
      "description": "Get the current commit CID & revision of the specified repo. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getLatestCommit",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the repo.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getRecord",
    "meta": {
      "short": "getRecord",
      "description": "Get data blocks needed to prove the existence or non-existence of record in the current version of repo. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getRecord",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the repo.",
                "required": true
              }
            ]
          },
          "collection": {
            "value": "{{collection}}",
            "placeholders": [
              {
                "name": "collection",
                "type": "String",
                "description": "collection",
                "required": true
              }
            ]
          },
          "rkey": {
            "value": "{{rkey}}",
            "placeholders": [
              {
                "name": "rkey",
                "type": "String",
                "description": "Record Key",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getRepo",
    "meta": {
      "short": "getRepo",
      "description": "Download a repository export as CAR file. Optionally only a 'diff' since a previous revision. Does not require auth; implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getRepo",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the repo.",
                "required": true
              }
            ]
          },
          "since": {
            "value": "{{since}}",
            "placeholders": [
              {
                "name": "since",
                "type": "String",
                "description": "The revision ('rev') of the repo to create a diff from.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-getRepoStatus",
    "meta": {
      "short": "getRepoStatus",
      "description": "Get the hosting status for a repository, on this server. Expected to be implemented by PDS and Relay."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.getRepoStatus",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the repo.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-listBlobs",
    "meta": {
      "short": "listBlobs",
      "description": "List blob CIDs for an account, since some repo revision. Does not require auth; implemented by PDS."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.listBlobs",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "did": {
            "value": "{{did}}",
            "placeholders": [
              {
                "name": "did",
                "type": "String",
                "description": "The DID of the repo.",
                "required": true
              }
            ]
          },
          "since": {
            "value": "{{since}}",
            "placeholders": [
              {
                "name": "since",
                "type": "String",
                "description": "Optional revision of the repo to list blobs since.",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "500"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-listHosts",
    "meta": {
      "short": "listHosts",
      "description": "Enumerates upstream hosts (eg, PDS or relay instances) that this service consumes from. Implemented by relays."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.listHosts",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "200"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-listRepos",
    "meta": {
      "short": "listRepos",
      "description": "Enumerates all the DID, rev, and commit CID for all repos hosted by this service. Does not require auth; implemented by PDS and Relay."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.listRepos",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "500"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-listReposByCollection",
    "meta": {
      "short": "listReposByCollection",
      "description": "Enumerates all the DIDs which have records with the given collection NSID."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.listReposByCollection",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "collection": {
            "value": "{{collection}}",
            "placeholders": [
              {
                "name": "collection",
                "type": "String",
                "description": "collection",
                "required": true
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "Maximum size of response set. Recommend setting a large maximum (1000+) when enumerating large DID lists.",
                "required": false,
                "default": "500"
              }
            ]
          },
          "cursor": {
            "value": "{{cursor}}",
            "placeholders": [
              {
                "name": "cursor",
                "type": "String",
                "description": "cursor",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-notifyOfUpdate",
    "meta": {
      "short": "notifyOfUpdate",
      "description": "Notify a crawling service of a recent update, and that crawling should resume. Intended use is after a gap between repo stream events caused the crawling service to disconnect. Does not require auth; implemented by Relay. DEPRECATED: just use com.atproto.sync.requestCrawl"
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.notifyOfUpdate",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"hostname\": \"{{hostname}}\"}",
          "placeholders": [
            {
              "name": "hostname",
              "type": "String",
              "description": "Hostname of the current service (usually a PDS) that is notifying of update.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-sync-requestCrawl",
    "meta": {
      "short": "requestCrawl",
      "description": "Request a service to persistently crawl hosted repos. Expected use is new PDS instances declaring their existence to Relays. Does not require auth."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.sync.requestCrawl",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"hostname\": \"{{hostname}}\"}",
          "placeholders": [
            {
              "name": "hostname",
              "type": "String",
              "description": "Hostname of the current service (eg, PDS) that is requesting to be crawled.",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-temp-addReservedHandle",
    "meta": {
      "short": "addReservedHandle",
      "description": "Add a handle to the set of reserved handles."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.temp.addReservedHandle",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"handle\": \"{{handle}}\"}",
          "placeholders": [
            {
              "name": "handle",
              "type": "String",
              "description": "handle",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-temp-checkHandleAvailability",
    "meta": {
      "short": "checkHandleAvailability",
      "description": "Checks whether the provided handle is available. If the handle is not available, available suggestions will be returned. Optional inputs will be used to generate suggestions."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.temp.checkHandleAvailability",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "handle": {
            "value": "{{handle}}",
            "placeholders": [
              {
                "name": "handle",
                "type": "String",
                "description": "Tentative handle. Will be checked for availability or used to build handle suggestions.",
                "required": true
              }
            ]
          },
          "email": {
            "value": "{{email}}",
            "placeholders": [
              {
                "name": "email",
                "type": "String",
                "description": "User-provided email. Might be used to build handle suggestions.",
                "required": false
              }
            ]
          },
          "birthDate": {
            "value": "{{birthDate}}",
            "placeholders": [
              {
                "name": "birthDate",
                "type": "String",
                "description": "User-provided birth date. Might be used to build handle suggestions.",
                "required": false
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-temp-checkSignupQueue",
    "meta": {
      "short": "checkSignupQueue",
      "description": "Check accounts location in signup queue."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.temp.checkSignupQueue",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-temp-dereferenceScope",
    "meta": {
      "short": "dereferenceScope",
      "description": "Allows finding the oauth permission scope from a reference"
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.temp.dereferenceScope",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "scope": {
            "value": "{{scope}}",
            "placeholders": [
              {
                "name": "scope",
                "type": "String",
                "description": "The scope reference (starts with 'ref:')",
                "required": true
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-temp-fetchLabels",
    "meta": {
      "short": "fetchLabels",
      "description": "DEPRECATED: use queryLabels or subscribeLabels instead -- Fetch all labels from a labeler created after a certain date."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.temp.fetchLabels",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          }
        },
        "queryParams": {
          "since": {
            "value": "{{since}}",
            "placeholders": [
              {
                "name": "since",
                "type": "Integer",
                "description": "since",
                "required": false
              }
            ]
          },
          "limit": {
            "value": "{{limit}}",
            "placeholders": [
              {
                "name": "limit",
                "type": "Integer",
                "description": "limit",
                "required": false,
                "default": "50"
              }
            ]
          }
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-temp-requestPhoneVerification",
    "meta": {
      "short": "requestPhoneVerification",
      "description": "Request a verification code to be sent to the supplied phone number"
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.temp.requestPhoneVerification",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"phoneNumber\": \"{{phoneNumber}}\"}",
          "placeholders": [
            {
              "name": "phoneNumber",
              "type": "String",
              "description": "phoneNumber",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  },
  {
    "handle": "com-atproto-temp-revokeAccountCredentials",
    "meta": {
      "short": "revokeAccountCredentials",
      "description": "Revoke sessions, password, and app passwords associated with account. May be resolved by a password reset."
    },
    "endpoint": {
      "value": "/xrpc/com.atproto.temp.revokeAccountCredentials",
      "placeholders": []
    },
    "fields": [],
    "operations": {
      "execute": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bearer {{accessToken}}",
            "placeholders": [
              {
                "name": "accessToken",
                "type": "String",
                "description": "Access token for authentication.",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"account\": \"{{account}}\"}",
          "placeholders": [
            {
              "name": "account",
              "type": "String",
              "description": "account",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": []
  }
]
```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Like Post

Bluesky Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/mJhUKtLAiobthslPs0Q4" alt="" width="188"><figcaption></figcaption></figure>

<p align="center">The Like Post action lets you show appreciation for a post by adding your like to it.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to support a colleague’s creative project update, so I use the Like Post action in Bluesky to give it a quick thumbs-up.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| postID     | String     | Yes      |
| userID     | String     | Yes      |

### Related Connections

[Bluesky](/human-connections/bluesky/bluesky)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "like-post",
  "state": "inDev",
  "meta": {
    "short": "Like Post",
    "description": "Likes a post on Bluesky."
  },
  "input": [
    {
      "name": "postID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the post to like."
      }
    },
    {
      "name": "userID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the user liking the post."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the post was liked successfully."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/xrpc/app.bsky.feed.like",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"repo\": \"{{userID}}\", \"collection\": \"app.bsky.feed.like\", \"record\": {\"subject\": {\"uri\": \"at://{{postID}}\"}, \"createdAt\": \"{{now}}\"}}",
          "placeholders": [
            {
              "name": "userID",
              "type": "String",
              "description": "The ID of the user liking the post.",
              "required": true
            },
            {
              "name": "postID",
              "type": "String",
              "description": "The ID of the post to like.",
              "required": true
            },
            {
              "name": "now",
              "type": "String",
              "description": "Current timestamp in ISO format.",
              "required": true,
              "default": "{{now}}"
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Repost Post

Bluesky Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/mJhUKtLAiobthslPs0Q4" alt="" width="188"><figcaption></figcaption></figure>

<p align="center">The Repost Post action lets you share someone else’s post with your own followers, similar to a retweet.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to share an insightful industry article with my network, so I use the Repost Post action in Bluesky to quickly amplify it to my followers.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| postId     | String     | Yes      |

### Related Connections

[Bluesky](/human-connections/bluesky/bluesky)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "repost-post",
  "state": "inDev",
  "meta": {
    "short": "Repost Post",
    "description": "Repost a post on Bluesky."
  },
  "input": [
    {
      "name": "postId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the post to repost."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the repost was successful."
      }
    },
    {
      "name": "repostId",
      "type": "String",
      "selector": ["data", "repostId"],
      "meta": {
        "description": "The ID of the reposted post."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/xrpc/com/atproto/repo/createRecord",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"repo\": \"{{repo}}\", \"collection\": \"app.bsky.feed.post\", \"record\": {\"text\": \"{{text}}\", \"createdAt\": \"{{createdAt}}\"}}",
          "placeholders": [
            {
              "name": "repo",
              "type": "String",
              "description": "The repository handle.",
              "required": true
            },
            {
              "name": "text",
              "type": "String",
              "description": "The text content of the post.",
              "required": true
            },
            {
              "name": "createdAt",
              "type": "String",
              "description": "The creation timestamp of the post.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Post

Bluesky Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/mJhUKtLAiobthslPs0Q4" alt="" width="188"><figcaption></figcaption></figure>

<p align="center">The Create Post action lets you compose and publish a new post with text, images, or links.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to announce our team’s latest milestone, so I use the Create Post action in Bluesky to share the news with our followers.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| text       | String     | Yes      |
| replyTo    | String     | No       |
| embed      | Object     | No       |

### Related Connections

[Bluesky](/human-connections/bluesky/bluesky)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-post",
  "state": "inDev",
  "meta": {
    "short": "Create Post",
    "description": "Create a new post on Bluesky."
  },
  "input": [
    {
      "name": "text",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The text content of the post."
      }
    },
    {
      "name": "replyTo",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The URI of the post being replied to."
      }
    },
    {
      "name": "embed",
      "type": "Object",
      "required": false,
      "meta": {
        "description": "Embedded content, such as images or external links."
      }
    }
  ],
  "output": [
    {
      "name": "uri",
      "type": "String",
      "selector": ["uri"],
      "meta": {
        "description": "The URI of the created post."
      }
    },
    {
      "name": "cid",
      "type": "String",
      "selector": ["cid"],
      "meta": {
        "description": "The CID (Content Identifier) of the created post."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/xrpc/com.atproto.repo.createRecord",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"collection\":\"app.bsky.feed.post\",\"repo\":\"{{did}}\",\"record\":{\"text\":\"{{text}}\",\"reply\":{{if replyTo}}\"{\"root\":{\"uri\":\"{{replyTo}}\"}}\"{{else}}null{{end}},\"embed\":{{if embed}}{{embed}}{{else}}null{{end}},\"createdAt\":\"{{now}}\"}}",
          "placeholders": [
            {
              "name": "authToken",
              "type": "String",
              "description": "Authentication token for Bluesky API.",
              "required": true
            },
            {
              "name": "did",
              "type": "String",
              "description": "Decentralized Identifier (DID) of the user.",
              "required": true
            },
            {
              "name": "text",
              "type": "String",
              "description": "The text content of the post.",
              "required": true
            },
            {
              "name": "replyTo",
              "type": "String",
              "description": "The URI of the post being replied to.",
              "required": false
            },
            {
              "name": "embed",
              "type": "Object",
              "description": "Embedded content, such as images or external links.",
              "required": false
            },
            {
              "name": "now",
              "type": "String",
              "description": "Current timestamp in ISO 8601 format.",
              "required": true,
              "default": "{{now}}"
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Query: Find Thread

Bluesky Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/mJhUKtLAiobthslPs0Q4" alt="" width="188"><figcaption></figcaption></figure>

<p align="center">The Find Thread query lets you search for and locate a specific conversation or post thread by keyword, user, or other criteria.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to revisit the discussion about our new product features, so I use the Find Thread action in Bluesky to quickly locate the relevant conversation.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| threadID   | String     | Yes      |

### Related Connections

[Bluesky](/human-connections/bluesky/bluesky)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "find-thread",
  "state": "inDev",
  "meta": {
    "short": "Find Thread",
    "description": "Retrieve a specific thread from Bluesky based on its identifier."
  },
  "input": [
    {
      "name": "threadID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The unique identifier of the thread to retrieve."
      }
    }
  ],
  "output": [
    {
      "name": "thread",
      "type": "Object",
      "selector": ["thread"],
      "meta": {
        "description": "The retrieved thread object."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": "/xrpc/com/atproto/repo/getRecord",
        "queryParams": {
          "repo": "{{threadID.split('.')[0]}}",
          "collection": "app.bsky.feed.post",
          "rkey": "{{threadID.split('.')[1]}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Canva

Canva Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/hAYr59lojo2Da5s2weBG" alt="" width="375"><figcaption></figcaption></figure>

<h3 align="center">Put Canva to Work with @Human Automations and @Human Agents</h3>

<p align="center">The Canva Connection documents all Triggers, Actions and Query Operations available for creating automations via the Canva API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the Canva Connection?

* Connect to the Canva API in a few clicks
* Use the related Canva Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Asset Upload Completed**

Triggers on: asset/asset\_upload\_completed

Triggered when an asset upload job has finished.

**Autofill Job Completed**

Triggers on: autofill/autofill\_job\_completed

Triggered when an autofill job has finished.

**Comment Created**

Triggers on: comment/comment\_created

Triggered when a new comment is created on a design.

**Design Created**

Triggers on: design/design\_created

Triggered when a new design is created.

**Design Updated**

Triggers on: design/design\_updated

Triggered when an existing design is updated.

**Design Deleted**

Triggers on: design/design\_deleted

Triggered when a design is deleted.

**Design Published**

Triggers on: design/design\_published

Triggered when a design is published.

**Import Job Completed**

Triggers on: design\_import/import\_job\_completed

Triggered when a design import job has finished.

**Export Job Completed**

Triggers on: export/export\_job\_completed

Triggered when an export job has finished.

**Folder Created**

Triggers on: folder/folder\_created

Triggered when a new folder is created.

**Folder Updated**

Triggers on: folder/folder\_updated

Triggered when a folder's details are updated.

**Folder Deleted**

Triggers on: folder/folder\_deleted

Triggered when a folder is deleted.

**Resize Job Completed**

Triggers on: resize/resize\_job\_completed

Triggered when a resize job has finished.

#### Action Operations

[Action: Upload Asset](/human-connections/canva/canva/action-upload-asset)

[Action: Autofill Design From Brand Template](/human-connections/canva/canva/action-autofill-design-from-brand-template)

[Action: Import Design](/human-connections/canva/canva/action-import-design)

[Action: API Request](/human-connections/canva/canva/action-api-request)

#### Query Operations

Example link

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **Personal Access Token (PAT)** for **Canva** (system-to-system access), follow these steps:

#### **Prerequisites**

* A **Canva Pro/Enterprise** account (PATs are not available for free accounts).
* Admin access if generating tokens for a team.

#### **Steps**

1. **Log in** to your Canva account at <https://www.canva.com>.
2. **Click your profile icon** (top-right) → **Account Settings**.
3. Navigate to **Apps & Integrations** → **API & Developers**.
4. Under **Personal Access Tokens**, click **Generate Token**.
5. Enter a **Token Name** (e.g., "API Integration").
6. Select **Scopes** (permissions) for the token:
   * Common scopes: `design:read`, `design:write`, `user:read`.
7. Click **Generate Token** → Copy the token immediately (it won’t be shown again).

### Configuring Webhooks

1. **Log in** to the **Canva Developer Portal** at <https://www.canva.dev/>.
2. Select your integration from the **Your integrations** list.
3. Click on **Configuration** in the left-hand navigation menu.
4. Locate the **Webhook URL** section and enter your server's **Publicly accessible URL**.
5. Click **Save changes**.
6. Navigate to the **Scopes** page in the left sidebar.
7. Enable the **scopes** corresponding to the events you wish to receive (e.g., `collaboration:event`).
8. Click **Save changes**.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "canva",
  "status": "active",
  "meta": {
    "short": "Canva",
    "description": "Connect to Canva's design platform to manage designs, templates, and assets.",
    "icon": "canva",
    "tags": ["design", "graphics", "templates", "creative"]
  },
  "service": {
    "baseURL": {
      "value": "https://api.canva.com/v1"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "Accept": {
        "value": "application/json"
      },
      "Content-Type": {
        "value": "application/json"
      }
    },
    "auth": {
      "method": "system_to_system",
      "params": {}
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```[
  {
    "handle": "app",
    "meta": {
      "short": "App",
      "description": "Manage app resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [],
    "operations": {
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/apps/{appId}/jwks"
        },
        "headers": {},
        "meta": {
          "description": "Returns the Json Web Key Set (public keys) of an app. These keys are used to"
        }
      }
    }
  },
  {
    "handle": "asset",
    "meta": {
      "short": "Asset",
      "description": "Manage asset resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [
      {
        "event": "asset_upload_completed",
        "path": "/webhooks/canva/asset_upload_completed",
        "payload": [
          { "name": "asset_id", "type": "String", "selector": ["asset", "id"], "meta": { "description": "ID of the uploaded asset." } },
          { "name": "name", "type": "String", "selector": ["asset", "name"], "meta": { "description": "Name of the asset." } },
          { "name": "status", "type": "String", "selector": ["job", "status"], "meta": { "description": "Upload job status." } }
        ]
      }
    ],
    "operations": {
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/v1/assets/{assetId}"
        },
        "headers": {},
        "meta": {
          "description": "You can delete an asset by specifying its `assetId`. This operation mirrors the behavior"
        }
      },
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/assets/{assetId}"
        },
        "headers": {},
        "meta": {
          "description": "You can retrieve the metadata of an asset by specifying its `assetId`."
        }
      },
      "patch": {
        "method": "PATCH",
        "path": {
          "value": "/v1/assets/{assetId}"
        },
        "headers": {},
        "meta": {
          "description": "You can update the name and tags of an asset by specifying its `assetId`. Updating the tags"
        }
      },
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/asset-uploads"
        },
        "headers": {},
        "meta": {
          "description": "Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to upload an asset to the user's content library. Supported file types for assets are listed in the [Assets API overview](https://www.canva.dev/docs/connect/api-reference/assets/)."
        }
      },
      "get_jobId": {
        "method": "GET",
        "path": {
          "value": "/v1/url-asset-uploads/{jobId}"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      },
      "post_url-asset-uploads": {
        "method": "POST",
        "path": {
          "value": "/v1/url-asset-uploads"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      }
    }
  },
  {
    "handle": "autofill",
    "meta": {
      "short": "Autofill",
      "description": "Manage autofill resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [
      {
        "event": "autofill_job_completed",
        "path": "/webhooks/canva/autofill_job_completed",
        "payload": [
          { "name": "job_id", "type": "String", "selector": ["job", "id"], "meta": { "description": "ID of the autofill job." } },
          { "name": "status", "type": "String", "selector": ["job", "status"], "meta": { "description": "Status of the autofill job." } },
          { "name": "design_id", "type": "String", "selector": ["job", "design_id"], "meta": { "description": "ID of the resulting design." } }
        ]
      }
    ],
    "operations": {
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/autofills"
        },
        "headers": {},
        "meta": {
          "description": "WARNING: Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs."
        }
      },
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/autofills/{jobId}"
        },
        "headers": {},
        "meta": {
          "description": "AVAILABILITY: To use this API, your integration must act on behalf of a user that's a member of a [Canva Enterprise](https://www.canva.com/enterprise/) organization."
        }
      }
    }
  },
  {
    "handle": "brand_template",
    "meta": {
      "short": "Brand Template",
      "description": "Manage brand template resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [],
    "operations": {
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/brand-templates"
        },
        "headers": {},
        "meta": {
          "description": "WARNING: Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs."
        }
      },
      "get_brandTemplateId": {
        "method": "GET",
        "path": {
          "value": "/v1/brand-templates/{brandTemplateId}"
        },
        "headers": {},
        "meta": {
          "description": "WARNING: Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs."
        }
      },
      "get_dataset": {
        "method": "GET",
        "path": {
          "value": "/v1/brand-templates/{brandTemplateId}/dataset"
        },
        "headers": {},
        "meta": {
          "description": "WARNING: Brand templates were migrated to use a new ID format in September 2025. If your integration stores brand template IDs, you'll need to migrate to use the new IDs. Old brand template IDs will continue to be accepted for 6 months to give you time to migrate to the new IDs."
        }
      }
    }
  },
  {
    "handle": "comment",
    "meta": {
      "short": "Comment",
      "description": "Manage comment resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [
      {
        "event": "comment_created",
        "path": "/webhooks/canva/comment_created",
        "payload": [
          { "name": "comment_id", "type": "String", "selector": ["comment", "id"], "meta": { "description": "ID of the comment." } },
          { "name": "design_id", "type": "String", "selector": ["comment", "design_id"], "meta": { "description": "ID of the design the comment belongs to." } },
          { "name": "message", "type": "String", "selector": ["comment", "message"], "meta": { "description": "Text content of the comment." } }
        ]
      }
    ],
    "operations": {
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/comments"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      },
      "post_replies": {
        "method": "POST",
        "path": {
          "value": "/v1/designs/{designId}/comments/{threadId}/replies"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      },
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/designs/{designId}/comments/{threadId}/replies"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      },
      "get_threadId": {
        "method": "GET",
        "path": {
          "value": "/v1/designs/{designId}/comments/{threadId}"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      },
      "get_replyId": {
        "method": "GET",
        "path": {
          "value": "/v1/designs/{designId}/comments/{threadId}/replies/{replyId}"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      },
      "post_comments": {
        "method": "POST",
        "path": {
          "value": "/v1/designs/{designId}/comments"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      }
    }
  },
  {
    "handle": "connect",
    "meta": {
      "short": "Connect",
      "description": "Manage connect resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [],
    "operations": {
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/connect/keys"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      }
    }
  },
  {
    "handle": "design",
    "meta": {
      "short": "Design",
      "description": "Manage design resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [
      {
        "event": "design_created",
        "path": "/webhooks/canva/design_created",
        "payload": [
          { "name": "design_id", "type": "String", "selector": ["design", "id"], "meta": { "description": "ID of the created design." } },
          { "name": "title", "type": "String", "selector": ["design", "title"], "meta": { "description": "Title of the design." } }
        ]
      },
      {
        "event": "design_updated",
        "path": "/webhooks/canva/design_updated",
        "payload": [
          { "name": "design_id", "type": "String", "selector": ["design", "id"], "meta": { "description": "ID of the updated design." } },
          { "name": "title", "type": "String", "selector": ["design", "title"], "meta": { "description": "Title of the design." } }
        ]
      },
      {
        "event": "design_deleted",
        "path": "/webhooks/canva/design_deleted",
        "payload": [
          { "name": "design_id", "type": "String", "selector": ["design", "id"], "meta": { "description": "ID of the deleted design." } }
        ]
      },
      {
        "event": "design_published",
        "path": "/webhooks/canva/design_published",
        "payload": [
          { "name": "design_id", "type": "String", "selector": ["design", "id"], "meta": { "description": "ID of the published design." } },
          { "name": "url", "type": "String", "selector": ["design", "url"], "meta": { "description": "URL of the published design." } }
        ]
      }
    ],
    "operations": {
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/designs"
        },
        "headers": {},
        "meta": {
          "description": "Lists metadata for all the designs in a Canva user's"
        }
      },
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/designs"
        },
        "headers": {},
        "meta": {
          "description": "Creates a new Canva design. To create a new design, you can either:"
        }
      },
      "get_designId": {
        "method": "GET",
        "path": {
          "value": "/v1/designs/{designId}"
        },
        "headers": {},
        "meta": {
          "description": "Gets the metadata for a design. This includes owner information, URLs for editing and viewing, and thumbnail information."
        }
      },
      "get_pages": {
        "method": "GET",
        "path": {
          "value": "/v1/designs/{designId}/pages"
        },
        "headers": {},
        "meta": {
          "description": "<Warning>"
        }
      },
      "get_export-formats": {
        "method": "GET",
        "path": {
          "value": "/v1/designs/{designId}/export-formats"
        },
        "headers": {},
        "meta": {
          "description": "Lists the available file formats for [exporting a design](https://www.canva.dev/docs/connect/api-reference/exports/create-design-export-job/)."
        }
      }
    }
  },
  {
    "handle": "design_import",
    "meta": {
      "short": "Design Import",
      "description": "Manage design import resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [
      {
        "event": "import_job_completed",
        "path": "/webhooks/canva/import_job_completed",
        "payload": [
          { "name": "job_id", "type": "String", "selector": ["job", "id"], "meta": { "description": "ID of the import job." } },
          { "name": "status", "type": "String", "selector": ["job", "status"], "meta": { "description": "Status of the job." } },
          { "name": "design_id", "type": "String", "selector": ["job", "design_id"], "meta": { "description": "ID of the resulting design." } }
        ]
      }
    ],
    "operations": {
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/imports"
        },
        "headers": {},
        "meta": {
          "description": "Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to import an external file as a new design in Canva."
        }
      },
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/imports/{jobId}"
        },
        "headers": {},
        "meta": {
          "description": "Gets the result of a design import job created using the [Create design import job API](https://www.canva.dev/docs/connect/api-reference/design-imports/create-design-import-job/)."
        }
      },
      "post_url-imports": {
        "method": "POST",
        "path": {
          "value": "/v1/url-imports"
        },
        "headers": {},
        "meta": {
          "description": "Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to import an external file from a URL as a new design in Canva."
        }
      },
      "get_jobId": {
        "method": "GET",
        "path": {
          "value": "/v1/url-imports/{jobId}"
        },
        "headers": {},
        "meta": {
          "description": "Gets the result of a URL import job created using the [Create URL import job API](https://www.canva.dev/docs/connect/api-reference/design-imports/create-url-import-job/)."
        }
      }
    }
  },
  {
    "handle": "export",
    "meta": {
      "short": "Export",
      "description": "Manage export resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [
      {
        "event": "export_job_completed",
        "path": "/webhooks/canva/export_job_completed",
        "payload": [
          { "name": "job_id", "type": "String", "selector": ["job", "id"], "meta": { "description": "ID of the export job." } },
          { "name": "status", "type": "String", "selector": ["job", "status"], "meta": { "description": "Status of the job." } },
          { "name": "url", "type": "String", "selector": ["job", "export_url"], "meta": { "description": "URL to download the exported file." } }
        ]
      }
    ],
    "operations": {
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/exports"
        },
        "headers": {},
        "meta": {
          "description": "Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to export a file from Canva. Once the exported file is generated, you can download"
        }
      },
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/exports/{exportId}"
        },
        "headers": {},
        "meta": {
          "description": "Gets the result of a design export job that was created using the [Create design export job API](https://www.canva.dev/docs/connect/api-reference/exports/create-design-export-job/)."
        }
      }
    }
  },
  {
    "handle": "folder",
    "meta": {
      "short": "Folder",
      "description": "Manage folder resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [
      {
        "event": "folder_created",
        "path": "/webhooks/canva/folder_created",
        "payload": [
          { "name": "folder_id", "type": "String", "selector": ["folder", "id"], "meta": { "description": "ID of the created folder." } },
          { "name": "name", "type": "String", "selector": ["folder", "name"], "meta": { "description": "Name of the folder." } }
        ]
      },
      {
        "event": "folder_updated",
        "path": "/webhooks/canva/folder_updated",
        "payload": [
          { "name": "folder_id", "type": "String", "selector": ["folder", "id"], "meta": { "description": "ID of the updated folder." } },
          { "name": "name", "type": "String", "selector": ["folder", "name"], "meta": { "description": "Name of the folder." } }
        ]
      },
      {
        "event": "folder_deleted",
        "path": "/webhooks/canva/folder_deleted",
        "payload": [
          { "name": "folder_id", "type": "String", "selector": ["folder", "id"], "meta": { "description": "ID of the deleted folder." } }
        ]
      }
    ],
    "operations": {
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/v1/folders/{folderId}"
        },
        "headers": {},
        "meta": {
          "description": "Deletes a folder with the specified `folderID`."
        }
      },
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/folders/{folderId}"
        },
        "headers": {},
        "meta": {
          "description": "Gets the name and other details of a folder using a folder's `folderID`."
        }
      },
      "patch": {
        "method": "PATCH",
        "path": {
          "value": "/v1/folders/{folderId}"
        },
        "headers": {},
        "meta": {
          "description": "Updates a folder's details using its `folderID`."
        }
      },
      "get_items": {
        "method": "GET",
        "path": {
          "value": "/v1/folders/{folderId}/items"
        },
        "headers": {},
        "meta": {
          "description": "Lists the items in a folder, including each item's `type`."
        }
      },
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/folders/move"
        },
        "headers": {},
        "meta": {
          "description": "Moves an item to another folder. You must specify the folder ID of the destination folder, as well as the ID of the item you want to move."
        }
      },
      "post_folders": {
        "method": "POST",
        "path": {
          "value": "/v1/folders"
        },
        "headers": {},
        "meta": {
          "description": "Creates a folder in one of the following locations:"
        }
      }
    }
  },
  {
    "handle": "oauth",
    "meta": {
      "short": "Oauth",
      "description": "Manage oauth resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [],
    "operations": {
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/oauth/token"
        },
        "headers": {},
        "meta": {
          "description": "This endpoint implements the OAuth 2.0 `token` endpoint, as part of the Authorization Code flow with Proof Key for Code Exchange (PKCE). For more information, see [Authentication](https://www.canva.dev/docs/connect/authentication/)."
        }
      },
      "post_introspect": {
        "method": "POST",
        "path": {
          "value": "/v1/oauth/introspect"
        },
        "headers": {},
        "meta": {
          "description": "Introspect an access token to see whether it is valid and active. You can also verify some token properties, such as its claims, scopes, and validity times."
        }
      },
      "post_revoke": {
        "method": "POST",
        "path": {
          "value": "/v1/oauth/revoke"
        },
        "headers": {},
        "meta": {
          "description": "Revoke an access token or a refresh token."
        }
      }
    }
  },
  {
    "handle": "oidc",
    "meta": {
      "short": "Oidc",
      "description": "Manage oidc resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [],
    "operations": {
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/oidc/jwks"
        },
        "headers": {},
        "meta": {
          "description": "Gets the JSON Web Key Set (public keys) for OIDC. These keys are used to verify JWTs in OpenID Connect flows."
        }
      },
      "get_userinfo": {
        "method": "GET",
        "path": {
          "value": "/v1/oidc/userinfo"
        },
        "headers": {},
        "meta": {
          "description": "Fetches the current UserInfo claims for the authorized user. This is the same fields"
        }
      }
    }
  },
  {
    "handle": "resize",
    "meta": {
      "short": "Resize",
      "description": "Manage resize resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [
      {
        "event": "resize_job_completed",
        "path": "/webhooks/canva/resize_job_completed",
        "payload": [
          { "name": "job_id", "type": "String", "selector": ["job", "id"], "meta": { "description": "ID of the resize job." } },
          { "name": "status", "type": "String", "selector": ["job", "status"], "meta": { "description": "Status of the job." } },
          { "name": "design_id", "type": "String", "selector": ["job", "design_id"], "meta": { "description": "ID of the resulting design." } }
        ]
      }
    ],
    "operations": {
      "post": {
        "method": "POST",
        "path": {
          "value": "/v1/resizes"
        },
        "headers": {},
        "meta": {
          "description": "AVAILABILITY: To use this API, your integration must act on behalf of a user that's on a Canva plan with premium features (such as Canva Pro)."
        }
      },
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/resizes/{jobId}"
        },
        "headers": {},
        "meta": {
          "description": "AVAILABILITY: To use this API, your integration must act on behalf of a user that's on a Canva plan with premium features (such as Canva Pro)."
        }
      }
    }
  },
  {
    "handle": "user",
    "meta": {
      "short": "User",
      "description": "Manage user resources via Canva Connect API."
    },
    "endpoint": {
      "value": ""
    },
    "webhooks": [],
    "operations": {
      "get": {
        "method": "GET",
        "path": {
          "value": "/v1/users/me"
        },
        "headers": {},
        "meta": {
          "description": "Returns the User ID and Team ID of the user"
        }
      },
      "get_capabilities": {
        "method": "GET",
        "path": {
          "value": "/v1/users/me/capabilities"
        },
        "headers": {},
        "meta": {
          "description": "Lists the API capabilities for the user account associated with the provided access token. For more information, see [Capabilities](https://www.canva.dev/docs/connect/capabilities/)."
        }
      },
      "get_profile": {
        "method": "GET",
        "path": {
          "value": "/v1/users/me/profile"
        },
        "headers": {},
        "meta": {
          "description": "Currently, this returns the display name of the user account associated with the provided access token. More user information is expected to be included in the future."
        }
      }
    }
  }
]
```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Upload Asset

Canva Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/hAYr59lojo2Da5s2weBG" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Upload Asset action in Canva allows you to add your own images, videos, or files to use in your designs.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to quickly add my company logo to a social media post, so I use the Upload Asset action in Canva to import the logo file and place it seamlessly into my design.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| file        | File       | Yes      |
| folderId    | String     | No       |
| accessToken | String     | Yes      |

### Related Connections

[Canva](/human-connections/canva/canva)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "upload-asset",
  "state": "inDev",
  "meta": {
    "short": "Upload Asset",
    "description": "Uploads an asset (image, video, etc.) to Canva."
  },
  "input": [
    {
      "name": "file",
      "type": "File",
      "required": true,
      "meta": {
        "description": "The file to upload."
      }
    },
    {
      "name": "folderId",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The ID of the folder where the asset will be uploaded."
      }
    }
  ],
  "output": [
    {
      "name": "assetId",
      "type": "String",
      "selector": ["id"],
      "meta": {
        "description": "The ID of the uploaded asset."
      }
    },
    {
      "name": "assetUrl",
      "type": "String",
      "selector": ["url"],
      "meta": {
        "description": "The URL of the uploaded asset."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/uploads",
        "headers": {
          "Content-Type": "multipart/form-data"
        },
        "bodyTemplate": {
          "value": "--boundary\nContent-Disposition: form-data; name=\"file\"; filename=\"{{file.name}}\"\nContent-Type: {{file.type}}\n\n{{file.content}}\n--boundary--",
          "placeholders": [
            {
              "name": "file",
              "type": "File",
              "description": "The file to upload.",
              "required": true
            },
            {
              "name": "accessToken",
              "type": "String",
              "description": "The access token for Canva API.",
              "required": true
            }
          ]
        },
        "queryParams": {
          "folder_id": "{{folderId}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Autofill Design From Brand Template

Canva Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/hAYr59lojo2Da5s2weBG" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Autofill Design From Brand Template action in Canva automatically applies your brand’s colors, fonts, and logos to a new design based on a saved template.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a new flyer for our event without starting from scratch, so I use Autofill Design From Brand Template in Canva to instantly apply our brand’s colors, fonts, and logo to a pre-made template.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| templateId | String     | Yes      |
| designData | Map        | Yes      |
| designId   | String     | No       |
| designUrl  | String     | No       |

### Related Connections

[Canva](/human-connections/canva/canva)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "autofill-design-from-brand-template",
  "state": "inDev",
  "meta": {
    "short": "Autofill Design From Brand Template",
    "description": "Automatically populate a design using a predefined brand template in Canva."
  },
  "input": [
    {
      "name": "templateId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the brand template to use."
      }
    },
    {
      "name": "designData",
      "type": "Map",
      "required": true,
      "meta": {
        "description": "A map of key-value pairs to populate the template fields."
      }
    }
  ],
  "output": [
    {
      "name": "designId",
      "type": "String",
      "selector": ["response", "designId"],
      "meta": {
        "description": "The ID of the newly created design."
      }
    },
    {
      "name": "designUrl",
      "type": "String",
      "selector": ["response", "designUrl"],
      "meta": {
        "description": "The URL to access the newly created design."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/templates/{{templateId}}/autofill",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"data\": {{designData}}}",
          "placeholders": [
            {
              "name": "designData",
              "type": "Map",
              "description": "Data to populate the template.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Import Design

Canva Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/hAYr59lojo2Da5s2weBG" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Import Design action in Canva lets you bring in existing designs or files from other platforms to edit or repurpose.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to update last month’s presentation with new data, so I use Import Design in Canva to quickly bring in the old slides and make my edits.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| designURL  | String     | Yes      |
| folderID   | String     | No       |

### Related Connections

[Canva](/human-connections/canva/canva)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "import-design",
  "state": "inDev",
  "meta": {
    "short": "Import Design",
    "description": "Import a design into Canva from an external source."
  },
  "input": [
    {
      "name": "designURL",
      "type": "String",
      "required": true,
      "meta": {
        "description": "URL of the design to import."
      }
    },
    {
      "name": "folderID",
      "type": "String",
      "required": false,
      "meta": {
        "description": "ID of the folder where the design will be saved."
      }
    }
  ],
  "output": [
    {
      "name": "designID",
      "type": "String",
      "selector": ["data", "id"],
      "meta": {
        "description": "ID of the imported design."
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["data", "status"],
      "meta": {
        "description": "Status of the import operation."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/designs/import",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"design_url\": \"{{designURL}}\", \"folder_id\": \"{{folderID}}\"}",
          "placeholders": [
            {
              "name": "designURL",
              "type": "String",
              "description": "URL of the design to import.",
              "required": true
            },
            {
              "name": "folderID",
              "type": "String",
              "description": "ID of the folder where the design will be saved.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: API Request

Canva Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/hAYr59lojo2Da5s2weBG" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The API Request action in Canva allows you to send or receive data from external apps or services to automate or enhance your designs.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to automatically generate personalized certificates for event attendees, so I use the API Request action in Canva to pull attendee names from our database and create custom designs for each one.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| endpoint    | String     | Yes      |
| method      | String     | Yes      |
| headers     | Map        | No       |
| queryParams | Map        | No       |
| body        | String     | No       |

### Related Connections

[Canva](/human-connections/canva/canva)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "api-request",
  "state": "inDev",
  "meta": {
    "short": "API Request",
    "description": "Send an API request to Canva's API."
  },
  "input": [
    {
      "name": "endpoint",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The Canva API endpoint to call."
      }
    },
    {
      "name": "method",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The HTTP method to use (GET, POST, PUT, PATCH, DELETE)."
      }
    },
    {
      "name": "headers",
      "type": "Map",
      "required": false,
      "meta": {
        "description": "Additional headers to include in the request."
      }
    },
    {
      "name": "queryParams",
      "type": "Map",
      "required": false,
      "meta": {
        "description": "Query parameters to include in the request."
      }
    },
    {
      "name": "body",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The request body."
      }
    }
  ],
  "output": [
    {
      "name": "response",
      "type": "String",
      "selector": ["body"],
      "meta": {
        "description": "The response body from the API request."
      }
    },
    {
      "name": "statusCode",
      "type": "Integer",
      "selector": ["statusCode"],
      "meta": {
        "description": "The HTTP status code of the response."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "{{method}}",
        "path": "{{endpoint}}",
        "headers": "{{headers}}",
        "queryParams": "{{queryParams}}",
        "bodyTemplate": {
          "value": "{{body}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# ClickUp

ClickUp Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/TYRQHZpxmjdfcszStAav" alt="" width="375"><figcaption></figcaption></figure>

<h3 align="center">Put ClickUp to Work with @Human Automations and @Human Agents</h3>

<p align="center">The ClickUp Connection documents all Triggers, Actions and Query Operations available for creating automations via the ClickUp API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the ClickUp Connection?

* Connect to the ClickUp API in a few clicks
* Use the related ClickUp Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Task Comment Posted**

Triggers on: comments/taskCommentPosted

Triggered when a new comment is posted on a task.

**Task Comment Updated**

Triggers on: comments/taskCommentUpdated

Triggered when an existing comment on a task is updated.

**Folder Created**

Triggers on: folders/folderCreated

Triggered when a new folder is created in a space.

**Folder Updated**

Triggers on: folders/folderUpdated

Triggered when a folder's details or settings are updated.

**Folder Deleted**

Triggers on: folders/folderDeleted

Triggered when a folder is deleted.

**Goal Created**

Triggers on: goals/goalCreated

Triggered when a new goal is created in a workspace.

**Goal Updated**

Triggers on: goals/goalUpdated

Triggered when a goal's details or progress are updated.

**Goal Deleted**

Triggers on: goals/goalDeleted

Triggered when a goal is deleted.

**Key Result Created**

Triggers on: goals/keyResultCreated

Triggered when a new key result is added to a goal.

**Key Result Updated**

Triggers on: goals/keyResultUpdated

Triggered when a key result's details or progress are updated.

**Key Result Deleted**

Triggers on: goals/keyResultDeleted

Triggered when a key result is removed from a goal.

**List Created**

Triggers on: lists/listCreated

Triggered when a new list is created.

**List Updated**

Triggers on: lists/listUpdated

Triggered when a list's details or settings are updated.

**List Deleted**

Triggers on: lists/listDeleted

Triggered when a list is deleted.

**Space Created**

Triggers on: spaces/spaceCreated

Triggered when a new space is created in a workspace.

**Space Updated**

Triggers on: spaces/spaceUpdated

Triggered when a space's details or settings are updated.

**Space Deleted**

Triggers on: spaces/spaceDeleted

Triggered when a space is deleted.

**Task Created**

Triggers on: tasks/taskCreated

Triggered when a new task is created.

**Task Updated**

Triggers on: tasks/taskUpdated

Triggered when a task's details are updated.

**Task Deleted**

Triggers on: tasks/taskDeleted

Triggered when a task is deleted.

**Task Priority Updated**

Triggers on: tasks/taskPriorityUpdated

Triggered when a task's priority level is changed.

**Task Status Updated**

Triggers on: tasks/taskStatusUpdated

Triggered when a task's status is changed.

**Task Assignee Updated**

Triggers on: tasks/taskAssigneeUpdated

Triggered when a task's assignees are added or removed.

**Task Due Date Updated**

Triggers on: tasks/taskDueDateUpdated

Triggered when a task's due date is changed.

**Task Tag Updated**

Triggers on: tasks/taskTagUpdated

Triggered when tags are added to or removed from a task.

**Task Moved**

Triggers on: tasks/taskMoved

Triggered when a task is moved to a different list.

**Task Time Estimate Updated**

Triggers on: tasks/taskTimeEstimateUpdated

Triggered when a task's time estimate is changed.

**Task Time Tracked Updated**

Triggers on: tasks/taskTimeTrackedUpdated

Triggered when time is tracked or updated on a task.

#### Action Operations

[Action: Archive or Delete Task](/human-connections/clickup/clickup/action-create-a-project)

[Action: Send Direct Message](/human-connections/clickup/clickup/action-send-direct-message)

[Action: Create new Document](/human-connections/clickup/clickup/action-create-new-document)

[Action: Create Space](/human-connections/clickup/clickup/action-create-space)

#### Query Operations

Example link

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **Personal Access Token (PAT)** for **ClickUp**, follow these steps:

#### **Steps:**

1. **Log in** to your ClickUp account (ensure you have **admin permissions** if required).
2. Navigate to **Profile Settings**:
   * Click your **profile avatar** (top-right) → **"My Settings"**.
3. Go to **Apps** → **"Generate"** under **Personal Token**.
4. Enter a **Token Name** (e.g., "System Integration").
5. Select the **scopes (permissions)** needed (e.g., full access or granular permissions).
6. Click **"Generate Token"**.
7. **Copy the token** (it will only be shown once).

#### **Required Account:**

* A **ClickUp user account** (free or paid, depending on API access needs).

### Configuring Webhooks

1. **Log in** to your ClickUp account.
2. Select the **Space, Folder, or List** where you want to implement the webhook.
3. Click the **Automate** button (lightning bolt icon) in the upper-right corner.
4. Select **Add Automation**.
5. Choose a **Trigger** (e.g., "Task created", "Status changed", or "Comment posted").
6. Select **Call webhook** as the **Action**.
7. Enter the **Webhook URL** provided by your integration.
8. (Optional) Add any desired **Headers** or **URL Parameters**.
9. Click **Create** to save and activate the webhook.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "clickup",
  "status": "active",
  "meta": {
    "short": "ClickUp",
    "description": "Connect to ClickUp to manage tasks, projects, and workflows.",
    "icon": "clickup",
    "tags": ["project-management", "task-management", "productivity"]
  },
  "service": {
    "baseURL": {
      "value": "https://api.clickup.com/api/v2"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "Content-Type": {
        "value": "application/json"
      }
    },
    "auth": {
      "method": "api_token",
      "params": {
        "apiToken": {
          "token": {
            "value": "{{apiToken}}",
            "placeholders": [
              {
                "name": "apiToken",
                "type": "String",
                "description": "ClickUp API token",
                "required": true
              }
            ]
          },
          "headerName": {
            "value": "Authorization"
          }
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

\[ { "handle": "workspaces", "meta": { "short": "Workspaces", "description": "Manage workspaces in ClickUp." }, "endpoint": { "value": "/team" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/{{team\_id}}/plan" } } }, "webhooks": \[] }, { "handle": "checklists", "meta": { "short": "Task Checklists", "description": "Manage task checklists in ClickUp." }, "endpoint": { "value": "/task/{{task\_id}}/checklist" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "post": { "method": "POST", "path": { "value": "/checklist/{{checklist\_id}}/checklist\_item" } }, "put": { "method": "PUT", "path": { "value": "/checklist/{{checklist\_id}}/checklist\_item/{{checklist\_item\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/checklist/{{checklist\_id}}/checklist\_item/{{checklist\_item\_id}}" } } }, "webhooks": \[] }, { "handle": "comments", "meta": { "short": "Comments", "description": "Manage comments in ClickUp." }, "endpoint": { "value": "/task/{{task\_id}}/comment" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/comment/{{comment\_id}}/reply" } }, "post": { "method": "POST", "path": { "value": "/comment/{{comment\_id}}/reply" } }, "put": { "method": "PUT", "path": { "value": "/comment/{{comment\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/comment/{{comment\_id}}" } } }, "webhooks": \[ { "event": "taskCommentPosted", "path": "/webhooks/clickup/taskCommentPosted", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task the comment was posted on." } }, { "name": "comment\_id", "type": "String", "selector": \["history\_items", "0", "comment", "id"], "meta": { "description": "ID of the new comment." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who posted the comment." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskCommentUpdated", "path": "/webhooks/clickup/taskCommentUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task the comment belongs to." } }, { "name": "comment\_id", "type": "String", "selector": \["history\_items", "0", "comment", "id"], "meta": { "description": "ID of the updated comment." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who updated the comment." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] } ] }, { "handle": "custom\_fields", "meta": { "short": "Custom Fields", "description": "Manage custom fields in ClickUp." }, "endpoint": { "value": "/list/{{list\_id}}/field" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/team/{{team\_id}}/field" } }, "post": { "method": "POST", "path": { "value": "/task/{{task\_id}}/field/{{field\_id}}" }, "queryParams": { "custom\_task\_ids": { "value": "{{custom\_task\_ids}}" }, "team\_id": { "value": "{{team\_id}}" } } }, "delete": { "method": "DELETE", "path": { "value": "/task/{{task\_id}}/field/{{field\_id}}" }, "queryParams": { "custom\_task\_ids": { "value": "{{custom\_task\_ids}}" }, "team\_id": { "value": "{{team\_id}}" } } } }, "webhooks": \[] }, { "handle": "folders", "meta": { "short": "Folders", "description": "Manage folders in ClickUp." }, "endpoint": { "value": "/space/{{space\_id}}/folder" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/" }, "queryParams": { "archived": { "value": "{{archived}}" } } }, "post": { "method": "POST", "path": { "value": "\_template/{{template\_id}}" } }, "read": { "method": "GET", "path": { "value": "/folder/{{folder\_id}}" } }, "put": { "method": "PUT", "path": { "value": "/folder/{{folder\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/folder/{{folder\_id}}" } } }, "webhooks": \[ { "event": "folderCreated", "path": "/webhooks/clickup/folderCreated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "folder\_id", "type": "String", "selector": \["folder\_id"], "meta": { "description": "ID of the created folder." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who created the folder." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "folderUpdated", "path": "/webhooks/clickup/folderUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "folder\_id", "type": "String", "selector": \["folder\_id"], "meta": { "description": "ID of the updated folder." } }, { "name": "field", "type": "String", "selector": \["history\_items", "0", "field"], "meta": { "description": "Field that changed." } }, { "name": "before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Value before the change." } }, { "name": "after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Value after the change." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who made the change." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "folderDeleted", "path": "/webhooks/clickup/folderDeleted", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "folder\_id", "type": "String", "selector": \["folder\_id"], "meta": { "description": "ID of the deleted folder." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who deleted the folder." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] } ] }, { "handle": "goals", "meta": { "short": "Goals", "description": "Manage goals in ClickUp." }, "endpoint": { "value": "/team/{{team\_id}}/goal" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/" }, "queryParams": { "include\_completed": { "value": "{{include\_completed}}" } } }, "post": { "method": "POST", "path": { "value": "/goal/{{goal\_id}}/key\_result" } }, "read": { "method": "GET", "path": { "value": "/goal/{{goal\_id}}" } }, "put": { "method": "PUT", "path": { "value": "/key\_result/{{key\_result\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/key\_result/{{key\_result\_id}}" } } }, "webhooks": \[ { "event": "goalCreated", "path": "/webhooks/clickup/goalCreated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "goal\_id", "type": "String", "selector": \["goal\_id"], "meta": { "description": "ID of the created goal." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who created the goal." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "goalUpdated", "path": "/webhooks/clickup/goalUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "goal\_id", "type": "String", "selector": \["goal\_id"], "meta": { "description": "ID of the updated goal." } }, { "name": "field", "type": "String", "selector": \["history\_items", "0", "field"], "meta": { "description": "Field that changed." } }, { "name": "before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Value before the change." } }, { "name": "after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Value after the change." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who made the change." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "goalDeleted", "path": "/webhooks/clickup/goalDeleted", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "goal\_id", "type": "String", "selector": \["goal\_id"], "meta": { "description": "ID of the deleted goal." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who deleted the goal." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] } ] }, { "handle": "guests", "meta": { "short": "Guests", "description": "Manage guests in ClickUp." }, "endpoint": { "value": "/team/{{team\_id}}/guest" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "post": { "method": "POST", "path": { "value": "/folder/{{folder\_id}}/guest/{{guest\_id}}" }, "queryParams": { "include\_shared": { "value": "{{include\_shared}}" } } }, "read": { "method": "GET", "path": { "value": "/{{guest\_id}}" } }, "put": { "method": "PUT", "path": { "value": "/{{guest\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/folder/{{folder\_id}}/guest/{{guest\_id}}" }, "queryParams": { "include\_shared": { "value": "{{include\_shared}}" } } } }, "webhooks": \[] }, { "handle": "lists", "meta": { "short": "Lists", "description": "Manage lists in ClickUp." }, "endpoint": { "value": "/folder/{{folder\_id}}/list" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/space/{{space\_id}}/list" }, "queryParams": { "archived": { "value": "{{archived}}" } } }, "post": { "method": "POST", "path": { "value": "/space/{{space\_id}}/list\_template/{{template\_id}}" } }, "read": { "method": "GET", "path": { "value": "/list/{{list\_id}}" } }, "put": { "method": "PUT", "path": { "value": "/list/{{list\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/list/{{list\_id}}/task/{{task\_id}}" } } }, "webhooks": \[ { "event": "listCreated", "path": "/webhooks/clickup/listCreated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "list\_id", "type": "String", "selector": \["list\_id"], "meta": { "description": "ID of the created list." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who created the list." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "listUpdated", "path": "/webhooks/clickup/listUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "list\_id", "type": "String", "selector": \["list\_id"], "meta": { "description": "ID of the updated list." } }, { "name": "field", "type": "String", "selector": \["history\_items", "0", "field"], "meta": { "description": "Field that changed." } }, { "name": "before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Value before the change." } }, { "name": "after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Value after the change." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who made the change." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "listDeleted", "path": "/webhooks/clickup/listDeleted", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "list\_id", "type": "String", "selector": \["list\_id"], "meta": { "description": "ID of the deleted list." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who deleted the list." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] } ] }, { "handle": "spaces", "meta": { "short": "Spaces", "description": "Manage spaces in ClickUp." }, "endpoint": { "value": "/team/{{team\_id}}/space" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/" }, "queryParams": { "archived": { "value": "{{archived}}" } } }, "post": { "method": "POST", "path": { "value": "/" } }, "read": { "method": "GET", "path": { "value": "/space/{{space\_id}}" } }, "put": { "method": "PUT", "path": { "value": "/space/{{space\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/space/{{space\_id}}" } } }, "webhooks": \[ { "event": "spaceCreated", "path": "/webhooks/clickup/spaceCreated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "space\_id", "type": "String", "selector": \["space\_id"], "meta": { "description": "ID of the created space." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who created the space." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "spaceUpdated", "path": "/webhooks/clickup/spaceUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "space\_id", "type": "String", "selector": \["space\_id"], "meta": { "description": "ID of the updated space." } }, { "name": "field", "type": "String", "selector": \["history\_items", "0", "field"], "meta": { "description": "Field that changed." } }, { "name": "before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Value before the change." } }, { "name": "after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Value after the change." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who made the change." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "spaceDeleted", "path": "/webhooks/clickup/spaceDeleted", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "space\_id", "type": "String", "selector": \["space\_id"], "meta": { "description": "ID of the deleted space." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who deleted the space." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] } ] }, { "handle": "tags", "meta": { "short": "Tags", "description": "Manage tags in ClickUp." }, "endpoint": { "value": "/space/{{space\_id}}/tag" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/" } }, "post": { "method": "POST", "path": { "value": "/task/{{task\_id}}/tag/{{tag\_name}}" }, "queryParams": { "custom\_task\_ids": { "value": "{{custom\_task\_ids}}" }, "team\_id": { "value": "{{team\_id}}" } } }, "put": { "method": "PUT", "path": { "value": "/{{tag\_name}}" } }, "delete": { "method": "DELETE", "path": { "value": "/task/{{task\_id}}/tag/{{tag\_name}}" }, "queryParams": { "custom\_task\_ids": { "value": "{{custom\_task\_ids}}" }, "team\_id": { "value": "{{team\_id}}" } } } }, "webhooks": \[ { "event": "taskTagUpdated", "path": "/webhooks/clickup/taskTagUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task whose tags changed." } }, { "name": "tag\_name", "type": "String", "selector": \["history\_items", "0", "after", "name"], "meta": { "description": "Tag name added or removed." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who updated tags." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] } ] }, { "handle": "tasks", "meta": { "short": "Tasks", "description": "Manage tasks in ClickUp." }, "endpoint": { "value": "/list/{{list\_id}}/task" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/task/bulk\_time\_in\_status/task\_ids" }, "queryParams": { "task\_ids": { "value": "{{task\_ids}}" }, "custom\_task\_ids": { "value": "{{custom\_task\_ids}}" }, "team\_id": { "value": "{{team\_id}}" } } }, "post": { "method": "POST", "path": { "value": "Template/{{template\_id}}" } }, "read": { "method": "GET", "path": { "value": "/task/{{task\_id}}" }, "queryParams": { "custom\_task\_ids": { "value": "{{custom\_task\_ids}}" }, "team\_id": { "value": "{{team\_id}}" }, "include\_subtasks": { "value": "{{include\_subtasks}}" }, "include\_markdown\_description": { "value": "{{include\_markdown\_description}}" }, "custom\_fields": { "value": "{{custom\_fields}}" } } }, "put": { "method": "PUT", "path": { "value": "/task/{{task\_id}}" }, "queryParams": { "custom\_task\_ids": { "value": "{{custom\_task\_ids}}" }, "team\_id": { "value": "{{team\_id}}" } } }, "delete": { "method": "DELETE", "path": { "value": "/task/{{task\_id}}" }, "queryParams": { "custom\_task\_ids": { "value": "{{custom\_task\_ids}}" }, "team\_id": { "value": "{{team\_id}}" } } } }, "webhooks": \[ { "event": "taskCreated", "path": "/webhooks/clickup/taskCreated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the created task." } }, { "name": "list\_id", "type": "String", "selector": \["history\_items", "0", "parent\_id"], "meta": { "description": "ID of the list the task was created in." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who created the task." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskUpdated", "path": "/webhooks/clickup/taskUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the updated task." } }, { "name": "field", "type": "String", "selector": \["history\_items", "0", "field"], "meta": { "description": "Field that changed." } }, { "name": "before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Value before the change." } }, { "name": "after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Value after the change." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who made the change." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskDeleted", "path": "/webhooks/clickup/taskDeleted", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the deleted task." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who deleted the task." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskStatusUpdated", "path": "/webhooks/clickup/taskStatusUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task." } }, { "name": "status\_before", "type": "String", "selector": \["history\_items", "0", "before", "status"], "meta": { "description": "Status before the change." } }, { "name": "status\_after", "type": "String", "selector": \["history\_items", "0", "after", "status"], "meta": { "description": "Status after the change." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who changed the status." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskPriorityUpdated", "path": "/webhooks/clickup/taskPriorityUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task." } }, { "name": "priority\_before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Priority before the change." } }, { "name": "priority\_after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Priority after the change." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who changed the priority." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskAssigneeUpdated", "path": "/webhooks/clickup/taskAssigneeUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task." } }, { "name": "assignee\_added", "type": "String", "selector": \["history\_items", "0", "after", "id"], "meta": { "description": "ID of the assignee added (if any)." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who changed the assignee." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskDueDateUpdated", "path": "/webhooks/clickup/taskDueDateUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task." } }, { "name": "due\_date\_before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Due date before the change (Unix ms)." } }, { "name": "due\_date\_after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Due date after the change (Unix ms)." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who changed the due date." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskMoved", "path": "/webhooks/clickup/taskMoved", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the moved task." } }, { "name": "list\_id\_before", "type": "String", "selector": \["history\_items", "0", "before", "id"], "meta": { "description": "ID of the list before the move." } }, { "name": "list\_id\_after", "type": "String", "selector": \["history\_items", "0", "after", "id"], "meta": { "description": "ID of the list after the move." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who moved the task." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskCommentPosted", "path": "/webhooks/clickup/taskCommentPosted", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task." } }, { "name": "comment\_id", "type": "String", "selector": \["history\_items", "0", "comment", "id"], "meta": { "description": "ID of the new comment." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who posted the comment." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskCommentUpdated", "path": "/webhooks/clickup/taskCommentUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task." } }, { "name": "comment\_id", "type": "String", "selector": \["history\_items", "0", "comment", "id"], "meta": { "description": "ID of the updated comment." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who updated the comment." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] }, { "event": "taskTimeTrackedUpdated", "path": "/webhooks/clickup/taskTimeTrackedUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task." } }, { "name": "time\_before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Time tracked before the change (ms)." } }, { "name": "time\_after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Time tracked after the change (ms)." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who changed tracked time." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] } ] }, { "handle": "time\_entries", "meta": { "short": "Time Tracking", "description": "Manage time tracking in ClickUp." }, "endpoint": { "value": "/team/{{team\_id}}/time\_entries" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/tags" } }, "post": { "method": "POST", "path": { "value": "/stop" } }, "read": { "method": "GET", "path": { "value": "/{{timer\_id}}" }, "queryParams": { "include\_task\_tags": { "value": "{{include\_task\_tags}}" }, "include\_location\_names": { "value": "{{include\_location\_names}}" }, "include\_approval\_history": { "value": "{{include\_approval\_history}}" }, "include\_approval\_details": { "value": "{{include\_approval\_details}}" } } }, "delete": { "method": "DELETE", "path": { "value": "/tags" } }, "put": { "method": "PUT", "path": { "value": "/tags" } } }, "webhooks": \[ { "event": "taskTimeTrackedUpdated", "path": "/webhooks/clickup/taskTimeTrackedUpdated", "payload": \[ { "name": "event", "type": "String", "selector": \["event"], "meta": { "description": "Event type name." } }, { "name": "webhook\_id", "type": "String", "selector": \["webhook\_id"], "meta": { "description": "Webhook identifier." } }, { "name": "task\_id", "type": "String", "selector": \["task\_id"], "meta": { "description": "ID of the task the time entry belongs to." } }, { "name": "time\_before", "type": "String", "selector": \["history\_items", "0", "before"], "meta": { "description": "Time tracked before the change (ms)." } }, { "name": "time\_after", "type": "String", "selector": \["history\_items", "0", "after"], "meta": { "description": "Time tracked after the change (ms)." } }, { "name": "user\_id", "type": "String", "selector": \["history\_items", "0", "user", "id"], "meta": { "description": "ID of the user who changed tracked time." } }, { "name": "date", "type": "String", "selector": \["history\_items", "0", "date"], "meta": { "description": "Unix timestamp (ms) of the event." } } ] } ] }, { "handle": "users", "meta": { "short": "Users", "description": "Manage users in ClickUp." }, "endpoint": { "value": "/team/{{team\_id}}/user" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "post": { "method": "POST", "path": { "value": "/" } }, "read": { "method": "GET", "path": { "value": "/{{user\_id}}" }, "queryParams": { "include\_shared": { "value": "{{include\_shared}}" } } }, "put": { "method": "PUT", "path": { "value": "/{{user\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/{{user\_id}}" } } }, "webhooks": \[] }, { "handle": "views", "meta": { "short": "Views", "description": "Manage views in ClickUp." }, "endpoint": { "value": "/team/{{team\_id}}/view" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/view/{{view\_id}}/task" }, "queryParams": { "page": { "value": "{{page}}" } } }, "post": { "method": "POST", "path": { "value": "/list/{{list\_id}}/view" } }, "read": { "method": "GET", "path": { "value": "/view/{{view\_id}}" } }, "put": { "method": "PUT", "path": { "value": "/view/{{view\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/view/{{view\_id}}" } } }, "webhooks": \[] }, { "handle": "webhooks", "meta": { "short": "Webhooks", "description": "Manage webhooks in ClickUp." }, "endpoint": { "value": "/team/{{team\_id}}/webhook" }, "fields": \[ { "name": "id", "type": "String", "selector": \[ "id" ], "meta": { "description": "Unique identifier." } }, { "name": "name", "type": "String", "selector": \[ "name" ], "meta": { "description": "Name of the resource." } }, { "name": "date\_created", "type": "String", "selector": \[ "date\_created", "date" ], "meta": { "description": "Creation timestamp." } } ], "operations": { "list": { "method": "GET", "path": { "value": "/" } }, "post": { "method": "POST", "path": { "value": "/" } }, "put": { "method": "PUT", "path": { "value": "/webhook/{{webhook\_id}}" } }, "delete": { "method": "DELETE", "path": { "value": "/webhook/{{webhook\_id}}" } } }, "webhooks": \[] } ]

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>
```


# Action: Archive or Delete Task

ClickUp Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/TYRQHZpxmjdfcszStAav" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Archive or Delete Task action removes a task by either archiving or permanently deleting it.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to archive or delete a task in ClickUp so that I can keep my project board organized and up-to-date.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| taskID     | String     | Yes      |
| actionType | String     | Yes      |

### Related Connections

[ClickUp](/human-connections/clickup/clickup)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "archive-or-delete-task",
  "state": "inDev",
  "meta": {
    "short": "Archive or Delete Task",
    "description": "Archives or deletes a task in ClickUp based on the provided task ID and action type."
  },
  "input": [
    {
      "name": "taskID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the task to archive or delete."
      }
    },
    {
      "name": "actionType",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The action to perform. Must be either 'archive' or 'delete'.",
        "options": ["archive", "delete"]
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the operation was successful."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "DELETE",
        "path": "/api/v2/task/{{taskID}}",
        "headers": {
          "Content-Type": "application/json"
        },
        "queryParams": {
          "custom_task_ids": "true",
          "team_id": "{{ClickUpTeamID}}"
        },
        "bodyTemplate": {
          "value": "{\"archive\": {{actionType == 'archive'}}}",
          "placeholders": [
            {
              "name": "actionType",
              "type": "String",
              "description": "The action to perform.",
              "required": true,
              "options": ["archive", "delete"]
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Send Direct Message

ClickUp Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/TYRQHZpxmjdfcszStAav" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Send Direct Message action transmits a private message to a specified user.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to send a direct message to a team member in ClickUp so that I can quickly communicate updates or reminders.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| userId     | String     | Yes      |
| message    | String     | Yes      |
| teamId     | String     | No       |

### Related Connections

[ClickUp](/human-connections/clickup/clickup)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "send-direct-message",
  "state": "inDev",
  "meta": {
    "short": "Send Direct Message",
    "description": "Send a direct message to a user or team in ClickUp"
  },
  "input": [
    {
      "name": "userId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the user to send the message to"
      }
    },
    {
      "name": "message",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The content of the message to send"
      }
    },
    {
      "name": "teamId",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The ID of the team to send the message to (optional)"
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates if the message was sent successfully"
      }
    },
    {
      "name": "messageId",
      "type": "String",
      "selector": ["data", "id"],
      "meta": {
        "description": "The ID of the sent message"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/api/v2/chat/message",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"user_id\": \"{{userId}}\", \"message\": \"{{message}}\", \"team_id\": \"{{teamId}}\"}",
          "placeholders": [
            {
              "name": "userId",
              "type": "String",
              "description": "The ID of the user to send the message to",
              "required": true
            },
            {
              "name": "message",
              "type": "String",
              "description": "The content of the message to send",
              "required": true
            },
            {
              "name": "teamId",
              "type": "String",
              "description": "The ID of the team to send the message to (optional)",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create new Document

ClickUp Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/TYRQHZpxmjdfcszStAav" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Create new Document action generates a new document within a specified location.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a new document in ClickUp so that I can store and share project-related information with my team.

#### Fields

| Field Name    | Field Type | Required |
| ------------- | ---------- | -------- |
| folder\_id    | String     | Yes      |
| name          | String     | Yes      |
| content       | String     | No       |
| document\_id  | String     | No       |
| document\_url | String     | No       |

### Related Connections

[ClickUp](/human-connections/clickup/clickup)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-new-document",
  "state": "inDev",
  "meta": {
    "short": "Create New Document",
    "description": "Creates a new document in ClickUp."
  },
  "input": [
    {
      "name": "folder_id",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the folder where the document will be created."
      }
    },
    {
      "name": "name",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the document."
      }
    },
    {
      "name": "content",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The content of the document."
      }
    }
  ],
  "output": [
    {
      "name": "document_id",
      "type": "String",
      "selector": ["id"],
      "meta": {
        "description": "The ID of the created document."
      }
    },
    {
      "name": "document_url",
      "type": "String",
      "selector": ["url"],
      "meta": {
        "description": "The URL of the created document."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/folder/{{folder_id}}/document",
        "headers": {
          "Content-Type": "application/json",
          "Authorization": "Bearer {{access_token}}"
        },
        "bodyTemplate": {
          "value": "{\"name\":\"{{name}}\",\"content\":\"{{content}}\"}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The name of the document.",
              "required": true
            },
            {
              "name": "content",
              "type": "String",
              "description": "The content of the document.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Space

ClickUp Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/TYRQHZpxmjdfcszStAav" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Create Space action creates a new Space (a high-level container for organizing work).</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a new space in ClickUp so that I can organize my team's tasks and projects effectively.

#### Fields

| Field Name          | Field Type | Required |
| ------------------- | ---------- | -------- |
| name                | String     | Yes      |
| multipleAssignments | Boolean    | No       |
| features            | Object     | No       |
| spaceID             | String     | No       |
| spaceName           | String     | No       |

### Related Connections

[ClickUp](/human-connections/clickup/clickup)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-space",
  "state": "inDev",
  "meta": {
    "short": "Create Space",
    "description": "Creates a new space in ClickUp."
  },
  "input": [
    {
      "name": "name",
      "type": "String",
      "required": true,
      "meta": {
        "description": "Name of the space to create."
      }
    },
    {
      "name": "multipleAssignments",
      "type": "Boolean",
      "required": false,
      "meta": {
        "description": "Whether multiple assignments are allowed in the space."
      }
    },
    {
      "name": "features",
      "type": "Object",
      "required": false,
      "meta": {
        "description": "Features enabled in the space."
      }
    }
  ],
  "output": [
    {
      "name": "spaceID",
      "type": "String",
      "selector": ["id"],
      "meta": {
        "description": "ID of the created space."
      }
    },
    {
      "name": "spaceName",
      "type": "String",
      "selector": ["name"],
      "meta": {
        "description": "Name of the created space."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/team/{{teamID}}/space",
        "headers": {
          "Content-Type": "application/json",
          "Authorization": "Bearer {{accessToken}}"
        },
        "bodyTemplate": {
          "value": "{\"name\":\"{{name}}\",\"multiple_assignments\":{{multipleAssignments}},\"features\":{{features}}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "Name of the space to create.",
              "required": true
            },
            {
              "name": "multipleAssignments",
              "type": "Boolean",
              "description": "Whether multiple assignments are allowed in the space.",
              "required": false
            },
            {
              "name": "features",
              "type": "Object",
              "description": "Features enabled in the space.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# ChatGPT

ChatGPT Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/WGWIgassTpoesmt8hzZy" alt="" width="188"><figcaption></figcaption></figure>

<h3 align="center">Put ChatGPT to Work with @Human Automations and @Human Agents</h3>

<p align="center">The ChatGPT Connection documents all Triggers, Actions and Query Operations available for creating automations via the ChatGPT API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the ChatGPT Connection?

* Connect to the ChatGPT API in a few clicks
* Use the related ChatGPT Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Chat Completion Created**

Triggers on: chat\_completions/chat.completion.created

Triggered when a new chat completion is created.

**Response Completed**

Triggers on: responses/response.completed

Triggered when a response is successfully completed.

**Response Failed**

Triggers on: responses/response.failed

Triggered when a response execution fails.

**Embedding Created**

Triggers on: embeddings/embedding.created

Triggered when a new text embedding is generated.

**Image Generated**

Triggers on: images/image.generated

Triggered when a new image is successfully generated.

**Image Failed**

Triggers on: images/image.failed

Triggered when image generation fails.

**Audio Transcription Completed**

Triggers on: audio\_transcriptions/audio.transcription.completed

Triggered when an audio file transcription is finished.

**Audio Speech Generated**

Triggers on: audio\_speech/audio.speech.generated

Triggered when text-to-speech audio is generated.

**Model Created**

Triggers on: models/model.created

Triggered when a new model becomes available.

**Model Deleted**

Triggers on: models/model.deleted

Triggered when a fine-tuned model is deleted.

**Moderation Completed**

Triggers on: moderations/moderation.completed

Triggered when a content moderation check is finished.

**File Created**

Triggers on: files/file.created

Triggered when a new file is uploaded or created.

**File Deleted**

Triggers on: files/file.deleted

Triggered when a file is permanently removed.

**Fine-Tuning Job Created**

Triggers on: fine\_tuning\_jobs/fine\_tuning.job.created

Triggered when a new fine-tuning job is initiated.

**Fine-Tuning Job Succeeded**

Triggers on: fine\_tuning\_jobs/fine\_tuning.job.succeeded

Triggered when a fine-tuning job completes successfully.

**Fine-Tuning Job Failed**

Triggers on: fine\_tuning\_jobs/fine\_tuning.job.failed

Triggered when a fine-tuning job fails to complete.

**Fine-Tuning Job Cancelled**

Triggers on: fine\_tuning\_jobs/fine\_tuning.job.cancelled

Triggered when a fine-tuning job is manually cancelled.

**Batch Created**

Triggers on: batches/batch.created

Triggered when a new processing batch is created.

**Batch Completed**

Triggers on: batches/batch.completed

Triggered when a batch processing job is finished.

**Batch Failed**

Triggers on: batches/batch.failed

Triggered when a batch processing job fails.

**Batch Cancelled**

Triggers on: batches/batch.cancelled

Triggered when a batch job is cancelled.

**Batch Expired**

Triggers on: batches/batch.expired

Triggered when a batch job expires before completion.

**Assistant Created**

Triggers on: assistants/assistant.created

Triggered when a new AI assistant is created.

**Assistant Updated**

Triggers on: assistants/assistant.updated

Triggered when an assistant's configuration is modified.

**Assistant Deleted**

Triggers on: assistants/assistant.deleted

Triggered when an assistant is deleted.

**Thread Created**

Triggers on: threads/thread.created

Triggered when a new conversation thread is created.

**Thread Deleted**

Triggers on: threads/thread.deleted

Triggered when a conversation thread is deleted.

**Thread Message Created**

Triggers on: thread\_messages/thread.message.created

Triggered when a new message is added to a thread.

**Thread Message Completed**

Triggers on: thread\_messages/thread.message.completed

Triggered when a thread message is fully generated.

**Thread Message Deleted**

Triggers on: thread\_messages/thread.message.deleted

Triggered when a message is removed from a thread.

**Thread Run Created**

Triggers on: runs/thread.run.created

Triggered when a new run is started on a thread.

**Thread Run Completed**

Triggers on: runs/thread.run.completed

Triggered when a thread run finishes successfully.

**Thread Run Failed**

Triggers on: runs/thread.run.failed

Triggered when a thread run encounters an error.

**Thread Run Requires Action**

Triggers on: runs/thread.run.requires\_action

Triggered when a thread run is waiting for user action or tool output.

**Thread Run Cancelled**

Triggers on: runs/thread.run.cancelled

Triggered when a thread run is cancelled.

**Thread Run Expired**

Triggers on: runs/thread.run.expired

Triggered when a thread run times out.

**Vector Store Created**

Triggers on: vector\_stores/vector\_store.created

Triggered when a new vector store is created.

**Vector Store Completed**

Triggers on: vector\_stores/vector\_store.completed

Triggered when a vector store is fully processed and ready.

**Vector Store Deleted**

Triggers on: vector\_stores/vector\_store.deleted

Triggered when a vector store is deleted.

#### Action Operations

[Action: Analyze Text](/human-connections/chatgpt/chatgpt/action-analyze-text)

[Action: Analyze Images](/human-connections/chatgpt/chatgpt/action-analyze-images)

[Action: Create Embedding](/human-connections/chatgpt/chatgpt/action-create-embedding)

[Action: Create Transcription](/human-connections/chatgpt/chatgpt/action-create-transcription)

#### Query Operations

Example link

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **Personal Access Token (PAT)** for **OpenAI** (system-to-system access via UI), follow these steps:

#### **Prerequisites**

* An **OpenAI account** (sign up at <https://platform.openai.com>)
* Access to the **OpenAI API dashboard** (requires an active subscription if using paid APIs)

#### **Steps to Generate a PAT**

1. **Log in** to your OpenAI account at <https://platform.openai.com>.
2. Navigate to the **API keys** section:
   * Click on the **"API keys"** button, under the Manage section.
3. **Create a new secret key**:
   * Click **"Create new secret key"**.
   * Provide a name (optional but recommended for tracking).
   * Select the required permissions - All.
4. **Copy the generated key**:
   * The PAT will be displayed **once**—store it securely.

### Configuring Webhooks

1. **Log in** to your OpenAI account at <https://platform.openai.com>.
2. Navigate to the **Webhooks** section:
   * Click on **"Settings"** or select your **Project** from the left sidebar.
   * Click on the **"Webhooks"** tab.
3. **Create a new webhook endpoint**:
   * Click the **"Create"** button.
   * Provide your **Endpoint URL** (must be a public HTTPS URL).
   * Select the **Events** you want to subscribe to (e.g., `batch.completed`, `response.completed`).
4. **Copy the signing secret**:
   * Once the webhook is created, copy the **Signing Secret**.
   * Use this secret to verify that incoming requests are sent from OpenAI.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "chatgpt-v1",
  "status": "active",
  "meta": {
    "short": "ChatGPT",
    "description": "Connect to OpenAI's ChatGPT API for natural language processing and text generation.",
    "icon": "chatgpt",
    "tags": ["ai", "nlp", "chatbot", "text-generation"]
  },
  "service": {
    "baseURL": {
      "value": "https://api.openai.com/v1"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": {
        "value": "Bearer {{apiKey}}"
      }
    },
    "auth": {
      "method": "api_token",
      "params": {
        "apiToken": {
          "token": {
            "value": "{{apiKey}}",
            "placeholders": [
              {
                "name": "apiKey",
                "type": "String",
                "description": "OpenAI API key for authentication",
                "required": true
              }
            ]
          },
          "headerName": {
            "value": "Authorization"
          }
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```
[
  {
    "handle": "chat_completions",
    "meta": {
      "short": "Chat Completions",
      "description": "Generate model responses for chat messages. The core endpoint for conversational AI and text generation."
    },
    "endpoint": {
      "value": "/chat/completions"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the completion." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'chat.completion'." } },
      { "name": "created", "type": "Integer", "selector": ["created"], "meta": { "description": "Unix timestamp of when the completion was created." } },
      { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "The model used to generate the completion." } },
      { "name": "content", "type": "String", "selector": ["choices", "0", "message", "content"], "meta": { "description": "The generated message content." } },
      { "name": "finish_reason", "type": "String", "selector": ["choices", "0", "finish_reason"], "meta": { "description": "Reason the model stopped generating (e.g., stop, length, tool_calls)." } },
      { "name": "prompt_tokens", "type": "Integer", "selector": ["usage", "prompt_tokens"], "meta": { "description": "Number of tokens in the prompt." } },
      { "name": "completion_tokens", "type": "Integer", "selector": ["usage", "completion_tokens"], "meta": { "description": "Number of tokens in the completion." } },
      { "name": "total_tokens", "type": "Integer", "selector": ["usage", "total_tokens"], "meta": { "description": "Total tokens used." } }
    ],
    "operations": {
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"messages\": {{messages}}}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "ID of the model to use (e.g., gpt-4o, gpt-4-turbo).", "required": true },
            { "name": "messages", "type": "String", "description": "JSON array of message objects with role and content.", "required": true }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "chat.completion.created", "path": "/webhooks/chatgpt/chat-completion-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the completion." } },
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'chat.completion'." } },
          { "name": "created", "type": "Integer", "selector": ["created"], "meta": { "description": "Unix timestamp of creation." } },
          { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "The model used to generate the completion." } },
          { "name": "content", "type": "String", "selector": ["choices", "0", "message", "content"], "meta": { "description": "The generated message content." } },
          { "name": "finish_reason", "type": "String", "selector": ["choices", "0", "finish_reason"], "meta": { "description": "Reason the model stopped generating." } },
          { "name": "prompt_tokens", "type": "Integer", "selector": ["usage", "prompt_tokens"], "meta": { "description": "Number of tokens in the prompt." } },
          { "name": "completion_tokens", "type": "Integer", "selector": ["usage", "completion_tokens"], "meta": { "description": "Number of tokens in the completion." } },
          { "name": "total_tokens", "type": "Integer", "selector": ["usage", "total_tokens"], "meta": { "description": "Total tokens used." } }
        ]
      }
    ]
  },
  {
    "handle": "responses",
    "meta": {
      "short": "Responses",
      "description": "Create model responses using the Responses API (newer stateful API supporting tools, file search, and web search)."
    },
    "endpoint": {
      "value": "/responses"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the response." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'response'." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the response was created." } },
      { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "The model used." } },
      { "name": "output_text", "type": "String", "selector": ["output", "0", "content", "0", "text"], "meta": { "description": "The generated text output." } },
      { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Response status (e.g., completed, in_progress, failed)." } },
      { "name": "input_tokens", "type": "Integer", "selector": ["usage", "input_tokens"], "meta": { "description": "Number of input tokens used." } },
      { "name": "output_tokens", "type": "Integer", "selector": ["usage", "output_tokens"], "meta": { "description": "Number of output tokens generated." } }
    ],
    "operations": {
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"input\": \"{{input}}\"}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "ID of the model to use (e.g., gpt-4o).", "required": true },
            { "name": "input", "type": "String", "description": "The input text or messages for the model.", "required": true }
          ]
        }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{response_id}}", "placeholders": [{ "name": "response_id", "type": "String", "description": "ID of the response to retrieve.", "required": true }] }
      },
      "delete": {
        "method": "DELETE",
        "path": { "value": "/{{response_id}}", "placeholders": [{ "name": "response_id", "type": "String", "description": "ID of the response to delete.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "response.completed", "path": "/webhooks/chatgpt/response-completed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the response." } },
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'response'." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Response status (e.g., completed)." } },
          { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "The model used." } },
          { "name": "output_text", "type": "String", "selector": ["output", "0", "content", "0", "text"], "meta": { "description": "The generated text output." } },
          { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of creation." } },
          { "name": "input_tokens", "type": "Integer", "selector": ["usage", "input_tokens"], "meta": { "description": "Input tokens used." } },
          { "name": "output_tokens", "type": "Integer", "selector": ["usage", "output_tokens"], "meta": { "description": "Output tokens generated." } }
        ]
      },
      {
        "event": "response.failed", "path": "/webhooks/chatgpt/response-failed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the response." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Response status (e.g., failed)." } },
          { "name": "error", "type": "Object", "selector": ["error"], "meta": { "description": "Error details explaining the failure." } }
        ]
      }
    ]
  },
  {
    "handle": "embeddings",
    "meta": {
      "short": "Embeddings",
      "description": "Generate vector representations of text for semantic search, clustering, and similarity tasks."
    },
    "endpoint": {
      "value": "/embeddings"
    },
    "fields": [
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'list'." } },
      { "name": "embedding", "type": "String", "selector": ["data", "0", "embedding"], "multivalue": true, "meta": { "description": "The embedding vector as an array of floats." } },
      { "name": "index", "type": "Integer", "selector": ["data", "0", "index"], "meta": { "description": "Index of the embedding in the list." } },
      { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "The model used to generate the embeddings." } },
      { "name": "prompt_tokens", "type": "Integer", "selector": ["usage", "prompt_tokens"], "meta": { "description": "Number of tokens in the input." } },
      { "name": "total_tokens", "type": "Integer", "selector": ["usage", "total_tokens"], "meta": { "description": "Total tokens used." } }
    ],
    "operations": {
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"input\": \"{{input}}\"}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "ID of the embedding model (e.g., text-embedding-3-small).", "required": true },
            { "name": "input", "type": "String", "description": "Text string or array of strings to embed.", "required": true }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "embedding.created", "path": "/webhooks/chatgpt/embedding-created",
        "payload": [
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'list'." } },
          { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "The model used for embeddings." } },
          { "name": "total_tokens", "type": "Integer", "selector": ["usage", "total_tokens"], "meta": { "description": "Total tokens used for the generation." } },
          { "name": "prompt_tokens", "type": "Integer", "selector": ["usage", "prompt_tokens"], "meta": { "description": "Input tokens used." } }
        ]
      }
    ]
  },
  {
    "handle": "images",
    "meta": {
      "short": "Images",
      "description": "Generate, edit, and create variations of images using DALL·E models."
    },
    "endpoint": {
      "value": "/images/generations"
    },
    "fields": [
      { "name": "created", "type": "Integer", "selector": ["created"], "meta": { "description": "Unix timestamp of when the image was created." } },
      { "name": "url", "type": "String", "selector": ["data", "0", "url"], "meta": { "description": "URL of the generated image." } },
      { "name": "revised_prompt", "type": "String", "selector": ["data", "0", "revised_prompt"], "meta": { "description": "The revised prompt used for generation (if applicable)." } },
      { "name": "b64_json", "type": "String", "selector": ["data", "0", "b64_json"], "meta": { "description": "Base64-encoded image data (when response_format is b64_json)." } }
    ],
    "operations": {
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"prompt\": \"{{prompt}}\", \"n\": {{n}}, \"size\": \"{{size}}\"}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "Model to use (e.g., dall-e-3, dall-e-2).", "required": true },
            { "name": "prompt", "type": "String", "description": "Text description of the desired image.", "required": true },
            { "name": "n", "type": "Integer", "description": "Number of images to generate (1–10).", "required": false },
            { "name": "size", "type": "String", "description": "Image size (e.g., 1024x1024, 1792x1024).", "required": false, "options": ["256x256", "512x512", "1024x1024", "1792x1024", "1024x1792"] }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "image.generated", "path": "/webhooks/chatgpt/image-generated",
        "payload": [
          { "name": "url", "type": "String", "selector": ["data", "0", "url"], "meta": { "description": "URL of the generated image." } },
          { "name": "revised_prompt", "type": "String", "selector": ["data", "0", "revised_prompt"], "meta": { "description": "The revised prompt used for generation." } },
          { "name": "created", "type": "Integer", "selector": ["created"], "meta": { "description": "Unix timestamp of creation." } }
        ]
      },
      {
        "event": "image.failed", "path": "/webhooks/chatgpt/image-failed",
        "payload": [
          { "name": "error", "type": "Object", "selector": ["error"], "meta": { "description": "Error details if image generation failed." } }
        ]
      }
    ]
  },
  {
    "handle": "audio_transcriptions",
    "meta": {
      "short": "Audio Transcriptions",
      "description": "Transcribe audio into text using the Whisper model."
    },
    "endpoint": {
      "value": "/audio/transcriptions"
    },
    "fields": [
      { "name": "text", "type": "String", "selector": ["text"], "meta": { "description": "The transcribed text." } },
      { "name": "language", "type": "String", "selector": ["language"], "meta": { "description": "The language of the transcribed text." } },
      { "name": "duration", "type": "String", "selector": ["duration"], "meta": { "description": "Duration of the audio in seconds." } }
    ],
    "operations": {
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"file\": \"{{file}}\"}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "Model to use (e.g., whisper-1).", "required": true },
            { "name": "file", "type": "String", "description": "Audio file to transcribe (multipart/form-data).", "required": true },
            { "name": "language", "type": "String", "description": "Language of the audio in ISO-639-1 format.", "required": false },
            { "name": "prompt", "type": "String", "description": "Optional context or spelling hints.", "required": false }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "audio.transcription.completed", "path": "/webhooks/chatgpt/audio-transcription-completed",
        "payload": [
          { "name": "text", "type": "String", "selector": ["text"], "meta": { "description": "The transcribed text." } },
          { "name": "language", "type": "String", "selector": ["language"], "meta": { "description": "The language detected." } },
          { "name": "duration", "type": "String", "selector": ["duration"], "meta": { "description": "Duration of the audio in seconds." } }
        ]
      }
    ]
  },
  {
    "handle": "audio_speech",
    "meta": {
      "short": "Audio Speech",
      "description": "Generate spoken audio from text using TTS models."
    },
    "endpoint": {
      "value": "/audio/speech"
    },
    "fields": [
      { "name": "audio_data", "type": "String", "selector": [], "meta": { "description": "Raw binary audio content returned in the response body." } }
    ],
    "operations": {
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"input\": \"{{input}}\", \"voice\": \"{{voice}}\"}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "TTS model to use (e.g., tts-1, tts-1-hd).", "required": true },
            { "name": "input", "type": "String", "description": "The text to synthesize (max 4096 characters).", "required": true },
            { "name": "voice", "type": "String", "description": "Voice to use.", "required": true, "options": ["alloy", "echo", "fable", "onyx", "nova", "shimmer"] },
            { "name": "response_format", "type": "String", "description": "Output audio format.", "required": false, "options": ["mp3", "opus", "aac", "flac", "wav", "pcm"] }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "audio.speech.generated", "path": "/webhooks/chatgpt/audio-speech-generated",
        "payload": [
          { "name": "audio_data", "type": "String", "selector": [], "meta": { "description": "Binary audio content." } }
        ]
      }
    ]
  },
  {
    "handle": "models",
    "meta": {
      "short": "Models",
      "description": "List and retrieve available OpenAI models."
    },
    "endpoint": {
      "value": "/models"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Model identifier (e.g., gpt-4o)." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'model'." } },
      { "name": "created", "type": "Integer", "selector": ["created"], "meta": { "description": "Unix timestamp of when the model was created." } },
      { "name": "owned_by", "type": "String", "selector": ["owned_by"], "meta": { "description": "Organization that owns the model." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" } },
      "read": { "method": "GET", "path": { "value": "/{{model_id}}", "placeholders": [{ "name": "model_id", "type": "String", "description": "The ID of the model.", "required": true }] } },
      "delete": { "method": "DELETE", "path": { "value": "/{{model_id}}", "placeholders": [{ "name": "model_id", "type": "String", "description": "The ID of the fine-tuned model to delete.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "model.created", "path": "/webhooks/chatgpt/model-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Model identifier (e.g., gpt-4o)." } },
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'model'." } },
          { "name": "created", "type": "Integer", "selector": ["created"], "meta": { "description": "Unix timestamp of creation." } },
          { "name": "owned_by", "type": "String", "selector": ["owned_by"], "meta": { "description": "Organization that owns the model." } }
        ]
      },
      {
        "event": "model.deleted", "path": "/webhooks/chatgpt/model-deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Model identifier." } },
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type." } },
          { "name": "deleted", "type": "Boolean", "selector": ["deleted"], "meta": { "description": "Whether the model was successfully deleted." } }
        ]
      }
    ]
  },
  {
    "handle": "moderations",
    "meta": {
      "short": "Moderations",
      "description": "Classify text for policy violations using OpenAI's moderation model."
    },
    "endpoint": {
      "value": "/moderations"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the moderation result." } },
      { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "The moderation model used." } },
      { "name": "flagged", "type": "Boolean", "selector": ["results", "0", "flagged"], "meta": { "description": "Whether the input was flagged as violating policy." } },
      { "name": "hate", "type": "Boolean", "selector": ["results", "0", "categories", "hate"], "meta": { "description": "Whether hate content was detected." } },
      { "name": "harassment", "type": "Boolean", "selector": ["results", "0", "categories", "harassment"], "meta": { "description": "Whether harassment content was detected." } },
      { "name": "self_harm", "type": "Boolean", "selector": ["results", "0", "categories", "self-harm"], "meta": { "description": "Whether self-harm content was detected." } },
      { "name": "sexual", "type": "Boolean", "selector": ["results", "0", "categories", "sexual"], "meta": { "description": "Whether sexual content was detected." } },
      { "name": "violence", "type": "Boolean", "selector": ["results", "0", "categories", "violence"], "meta": { "description": "Whether violent content was detected." } }
    ],
    "operations": {
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"input\": \"{{input}}\"}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "Moderation model (e.g., omni-moderation-latest).", "required": false },
            { "name": "input", "type": "String", "description": "Text to classify.", "required": true }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "moderation.completed", "path": "/webhooks/chatgpt/moderation-completed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the moderation result." } },
          { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "The moderation model used." } },
          { "name": "flagged", "type": "Boolean", "selector": ["results", "0", "flagged"], "meta": { "description": "Whether content was flagged." } },
          { "name": "categories", "type": "Object", "selector": ["results", "0", "categories"], "meta": { "description": "Detailed violation categories." } }
        ]
      }
    ]
  },
  {
    "handle": "files",
    "meta": {
      "short": "Files",
      "description": "Upload and manage files used for fine-tuning, batch processing, and assistants."
    },
    "endpoint": {
      "value": "/files"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the file." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'file'." } },
      { "name": "bytes", "type": "Integer", "selector": ["bytes"], "meta": { "description": "File size in bytes." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the file was uploaded." } },
      { "name": "filename", "type": "String", "selector": ["filename"], "meta": { "description": "Name of the file." } },
      { "name": "purpose", "type": "String", "selector": ["purpose"], "meta": { "description": "Intended purpose of the file (e.g., fine-tune, assistants, batch)." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" }, "queryParams": { "purpose": { "value": "{{purpose}}", "placeholders": [{ "name": "purpose", "type": "String", "description": "Filter by purpose.", "required": false }] } } },
      "read": { "method": "GET", "path": { "value": "/{{file_id}}", "placeholders": [{ "name": "file_id", "type": "String", "description": "ID of the file.", "required": true }] } },
      "delete": { "method": "DELETE", "path": { "value": "/{{file_id}}", "placeholders": [{ "name": "file_id", "type": "String", "description": "ID of the file to delete.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "file.created", "path": "/webhooks/chatgpt/file-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "File identifier." } },
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'file'." } },
          { "name": "filename", "type": "String", "selector": ["filename"], "meta": { "description": "Name of the file." } },
          { "name": "purpose", "type": "String", "selector": ["purpose"], "meta": { "description": "Intended purpose of the file." } },
          { "name": "bytes", "type": "Integer", "selector": ["bytes"], "meta": { "description": "File size in bytes." } }
        ]
      },
      {
        "event": "file.deleted", "path": "/webhooks/chatgpt/file-deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "File identifier." } },
          { "name": "deleted", "type": "Boolean", "selector": ["deleted"], "meta": { "description": "Whether the file was successfully deleted." } }
        ]
      }
    ]
  },
  {
    "handle": "fine_tuning_jobs",
    "meta": {
      "short": "Fine-Tuning Jobs",
      "description": "Create and manage fine-tuning jobs to customize OpenAI models on your data."
    },
    "endpoint": {
      "value": "/fine_tuning/jobs"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the fine-tuning job." } },
      { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "Base model being fine-tuned." } },
      { "name": "fine_tuned_model", "type": "String", "selector": ["fine_tuned_model"], "meta": { "description": "Name of the resulting fine-tuned model." } },
      { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Job status (e.g., validating_files, queued, running, succeeded, failed, cancelled)." } },
      { "name": "training_file", "type": "String", "selector": ["training_file"], "meta": { "description": "ID of the training file." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the job was created." } },
      { "name": "finished_at", "type": "Integer", "selector": ["finished_at"], "meta": { "description": "Unix timestamp of when the job finished." } },
      { "name": "trained_tokens", "type": "Integer", "selector": ["trained_tokens"], "meta": { "description": "Total number of tokens trained." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" }, "queryParams": { "limit": { "value": "20" } } },
      "read": { "method": "GET", "path": { "value": "/{{fine_tuning_job_id}}", "placeholders": [{ "name": "fine_tuning_job_id", "type": "String", "description": "ID of the fine-tuning job.", "required": true }] } },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"training_file\": \"{{training_file}}\"}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "Base model to fine-tune (e.g., gpt-4o-mini).", "required": true },
            { "name": "training_file", "type": "String", "description": "ID of the uploaded training file.", "required": true }
          ]
        }
      },
      "delete": { "method": "DELETE", "path": { "value": "/{{fine_tuning_job_id}}", "placeholders": [{ "name": "fine_tuning_job_id", "type": "String", "description": "ID of the fine-tuning job.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "fine_tuning.job.created", "path": "/webhooks/chatgpt/fine-tuning-job-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Job identifier." } },
          { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "Base model being fine-tuned." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Job status." } },
          { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of creation." } },
          { "name": "training_file", "type": "String", "selector": ["training_file"], "meta": { "description": "ID of the training file used." } }
        ]
      },
      {
        "event": "fine_tuning.job.succeeded", "path": "/webhooks/chatgpt/fine-tuning-job-succeeded",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Job identifier." } },
          { "name": "fine_tuned_model", "type": "String", "selector": ["fine_tuned_model"], "meta": { "description": "Resulting model name." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Job status, always 'succeeded'." } },
          { "name": "trained_tokens", "type": "Integer", "selector": ["trained_tokens"], "meta": { "description": "Total number of tokens trained." } },
          { "name": "finished_at", "type": "Integer", "selector": ["finished_at"], "meta": { "description": "Unix timestamp of completion." } }
        ]
      },
      {
        "event": "fine_tuning.job.failed", "path": "/webhooks/chatgpt/fine-tuning-job-failed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Job identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Job status, always 'failed'." } },
          { "name": "error", "type": "Object", "selector": ["error"], "meta": { "description": "Error details explaining the failure." } }
        ]
      },
      {
        "event": "fine_tuning.job.cancelled", "path": "/webhooks/chatgpt/fine-tuning-job-cancelled",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Job identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Job status, always 'cancelled'." } }
        ]
      }
    ]
  },
  {
    "handle": "batches",
    "meta": {
      "short": "Batches",
      "description": "Submit large sets of API requests for asynchronous processing at lower cost."
    },
    "endpoint": {
      "value": "/batches"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the batch." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'batch'." } },
      { "name": "endpoint", "type": "String", "selector": ["endpoint"], "meta": { "description": "API endpoint the batch targets." } },
      { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Batch status (e.g., validating, in_progress, completed, failed, cancelled)." } },
      { "name": "input_file_id", "type": "String", "selector": ["input_file_id"], "meta": { "description": "ID of the uploaded input file." } },
      { "name": "output_file_id", "type": "String", "selector": ["output_file_id"], "meta": { "description": "ID of the output file with results." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the batch was created." } },
      { "name": "completed_at", "type": "Integer", "selector": ["completed_at"], "meta": { "description": "Unix timestamp of when the batch completed." } },
      { "name": "request_counts_total", "type": "Integer", "selector": ["request_counts", "total"], "meta": { "description": "Total number of requests in the batch." } },
      { "name": "request_counts_completed", "type": "Integer", "selector": ["request_counts", "completed"], "meta": { "description": "Number of completed requests." } },
      { "name": "request_counts_failed", "type": "Integer", "selector": ["request_counts", "failed"], "meta": { "description": "Number of failed requests." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" }, "queryParams": { "limit": { "value": "20" } } },
      "read": { "method": "GET", "path": { "value": "/{{batch_id}}", "placeholders": [{ "name": "batch_id", "type": "String", "description": "ID of the batch.", "required": true }] } },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"input_file_id\": \"{{input_file_id}}\", \"endpoint\": \"{{endpoint}}\", \"completion_window\": \"{{completion_window}}\"}",
          "placeholders": [
            { "name": "input_file_id", "type": "String", "description": "ID of the uploaded JSONL input file.", "required": true },
            { "name": "endpoint", "type": "String", "description": "API endpoint for the batch (e.g., /v1/chat/completions).", "required": true },
            { "name": "completion_window", "type": "String", "description": "Time window to complete the batch (e.g., 24h).", "required": true }
          ]
        }
      },
      "delete": { "method": "DELETE", "path": { "value": "/{{batch_id}}/cancel", "placeholders": [{ "name": "batch_id", "type": "String", "description": "ID of the batch to cancel.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "batch.created", "path": "/webhooks/chatgpt/batch-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Batch identifier." } },
          { "name": "endpoint", "type": "String", "selector": ["endpoint"], "meta": { "description": "API endpoint the batch targets." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Batch status." } },
          { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of creation." } }
        ]
      },
      {
        "event": "batch.completed", "path": "/webhooks/chatgpt/batch-completed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Batch identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Batch status, always 'completed'." } },
          { "name": "output_file_id", "type": "String", "selector": ["output_file_id"], "meta": { "description": "Results file ID." } },
          { "name": "request_counts_total", "type": "Integer", "selector": ["request_counts", "total"], "meta": { "description": "Total number of requests in the batch." } },
          { "name": "request_counts_completed", "type": "Integer", "selector": ["request_counts", "completed"], "meta": { "description": "Number of completed requests." } },
          { "name": "completed_at", "type": "Integer", "selector": ["completed_at"], "meta": { "description": "Unix timestamp of completion." } }
        ]
      },
      {
        "event": "batch.failed", "path": "/webhooks/chatgpt/batch-failed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Batch identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Batch status, always 'failed'." } },
          { "name": "errors", "type": "Object", "selector": ["errors"], "meta": { "description": "Error details for the batch." } }
        ]
      },
      {
        "event": "batch.cancelled", "path": "/webhooks/chatgpt/batch-cancelled",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Batch identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Batch status, always 'cancelled'." } }
        ]
      },
      {
        "event": "batch.expired", "path": "/webhooks/chatgpt/batch-expired",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Batch identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Batch status, always 'expired'." } }
        ]
      }
    ]
  },
  {
    "handle": "assistants",
    "meta": {
      "short": "Assistants",
      "description": "Create and manage AI assistants with custom instructions, tools, and knowledge."
    },
    "endpoint": {
      "value": "/assistants"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the assistant." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'assistant'." } },
      { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Name of the assistant." } },
      { "name": "description", "type": "String", "selector": ["description"], "meta": { "description": "Description of the assistant." } },
      { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "Model used by the assistant." } },
      { "name": "instructions", "type": "String", "selector": ["instructions"], "meta": { "description": "System instructions for the assistant." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the assistant was created." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" }, "queryParams": { "limit": { "value": "20" }, "order": { "value": "desc" } } },
      "read": { "method": "GET", "path": { "value": "/{{assistant_id}}", "placeholders": [{ "name": "assistant_id", "type": "String", "description": "ID of the assistant.", "required": true }] } },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"name\": \"{{name}}\", \"instructions\": \"{{instructions}}\"}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "Model to use (e.g., gpt-4o).", "required": true },
            { "name": "name", "type": "String", "description": "Name of the assistant.", "required": false },
            { "name": "instructions", "type": "String", "description": "System instructions for the assistant.", "required": false }
          ]
        }
      },
      "update": {
        "method": "POST",
        "path": { "value": "/{{assistant_id}}", "placeholders": [{ "name": "assistant_id", "type": "String", "description": "ID of the assistant.", "required": true }] },
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\", \"instructions\": \"{{instructions}}\"}",
          "placeholders": [
            { "name": "name", "type": "String", "description": "Updated name.", "required": false },
            { "name": "instructions", "type": "String", "description": "Updated instructions.", "required": false }
          ]
        }
      },
      "delete": { "method": "DELETE", "path": { "value": "/{{assistant_id}}", "placeholders": [{ "name": "assistant_id", "type": "String", "description": "ID of the assistant to delete.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "assistant.created", "path": "/webhooks/chatgpt/assistant-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Assistant identifier." } },
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'assistant'." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Assistant name." } },
          { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "Model used by the assistant." } },
          { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of creation." } }
        ]
      },
      {
        "event": "assistant.updated", "path": "/webhooks/chatgpt/assistant-updated",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Assistant identifier." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Updated assistant name." } },
          { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "Model used." } }
        ]
      },
      {
        "event": "assistant.deleted", "path": "/webhooks/chatgpt/assistant-deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Assistant identifier." } },
          { "name": "deleted", "type": "Boolean", "selector": ["deleted"], "meta": { "description": "Whether the assistant was successfully deleted." } }
        ]
      }
    ]
  },
  {
    "handle": "threads",
    "meta": {
      "short": "Threads",
      "description": "Create and manage conversation threads for use with Assistants."
    },
    "endpoint": {
      "value": "/threads"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the thread." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'thread'." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the thread was created." } }
    ],
    "operations": {
      "read": { "method": "GET", "path": { "value": "/{{thread_id}}", "placeholders": [{ "name": "thread_id", "type": "String", "description": "ID of the thread.", "required": true }] } },
      "create": { "method": "POST", "path": { "value": "" }, "bodyTemplate": { "value": "{}", "placeholders": [] } },
      "delete": { "method": "DELETE", "path": { "value": "/{{thread_id}}", "placeholders": [{ "name": "thread_id", "type": "String", "description": "ID of the thread to delete.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "thread.created", "path": "/webhooks/chatgpt/thread-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Thread identifier." } },
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'thread'." } },
          { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of creation." } }
        ]
      },
      {
        "event": "thread.deleted", "path": "/webhooks/chatgpt/thread-deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Thread identifier." } },
          { "name": "deleted", "type": "Boolean", "selector": ["deleted"], "meta": { "description": "Whether the thread was successfully deleted." } }
        ]
      }
    ]
  },
  {
    "handle": "thread_messages",
    "meta": {
      "short": "Thread Messages",
      "description": "Add and retrieve messages within an Assistant thread."
    },
    "endpoint": {
      "value": "/threads/{{thread_id}}/messages",
      "placeholders": [{ "name": "thread_id", "type": "String", "description": "ID of the thread.", "required": true }]
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the message." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'thread.message'." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the message was created." } },
      { "name": "role", "type": "String", "selector": ["role"], "meta": { "description": "Role of the message author (user or assistant)." } },
      { "name": "content", "type": "String", "selector": ["content", "0", "text", "value"], "meta": { "description": "Text content of the message." } },
      { "name": "assistant_id", "type": "String", "selector": ["assistant_id"], "meta": { "description": "ID of the assistant that created the message (if applicable)." } },
      { "name": "run_id", "type": "String", "selector": ["run_id"], "meta": { "description": "ID of the run that created the message (if applicable)." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" }, "queryParams": { "limit": { "value": "20" }, "order": { "value": "desc" } } },
      "read": { "method": "GET", "path": { "value": "/{{message_id}}", "placeholders": [{ "name": "message_id", "type": "String", "description": "ID of the message.", "required": true }] } },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"role\": \"{{role}}\", \"content\": \"{{content}}\"}",
          "placeholders": [
            { "name": "role", "type": "String", "description": "Role of the message author.", "required": true, "options": ["user", "assistant"] },
            { "name": "content", "type": "String", "description": "Content of the message.", "required": true }
          ]
        }
      },
      "delete": { "method": "DELETE", "path": { "value": "/{{message_id}}", "placeholders": [{ "name": "message_id", "type": "String", "description": "ID of the message to delete.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "thread.message.created", "path": "/webhooks/chatgpt/thread-message-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Message identifier." } },
          { "name": "thread_id", "type": "String", "selector": ["thread_id"], "meta": { "description": "ID of the thread." } },
          { "name": "role", "type": "String", "selector": ["role"], "meta": { "description": "Author role (user or assistant)." } },
          { "name": "content", "type": "String", "selector": ["content", "0", "text", "value"], "meta": { "description": "Message content." } },
          { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of creation." } }
        ]
      },
      {
        "event": "thread.message.completed", "path": "/webhooks/chatgpt/thread-message-completed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Message identifier." } },
          { "name": "thread_id", "type": "String", "selector": ["thread_id"], "meta": { "description": "ID of the thread." } },
          { "name": "content", "type": "String", "selector": ["content", "0", "text", "value"], "meta": { "description": "Final message content." } }
        ]
      },
      {
        "event": "thread.message.deleted", "path": "/webhooks/chatgpt/thread-message-deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Message identifier." } },
          { "name": "deleted", "type": "Boolean", "selector": ["deleted"], "meta": { "description": "Whether deletion was successful." } }
        ]
      }
    ]
  },
  {
    "handle": "runs",
    "meta": {
      "short": "Runs",
      "description": "Execute an assistant on a thread to produce responses and tool calls."
    },
    "endpoint": {
      "value": "/threads/{{thread_id}}/runs",
      "placeholders": [{ "name": "thread_id", "type": "String", "description": "ID of the thread.", "required": true }]
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the run." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'thread.run'." } },
      { "name": "assistant_id", "type": "String", "selector": ["assistant_id"], "meta": { "description": "ID of the assistant used for the run." } },
      { "name": "thread_id", "type": "String", "selector": ["thread_id"], "meta": { "description": "ID of the thread." } },
      { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Run status (e.g., queued, in_progress, completed, failed, cancelled, requires_action)." } },
      { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "Model used for the run." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the run was created." } },
      { "name": "completed_at", "type": "Integer", "selector": ["completed_at"], "meta": { "description": "Unix timestamp of when the run completed." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" }, "queryParams": { "limit": { "value": "20" }, "order": { "value": "desc" } } },
      "read": { "method": "GET", "path": { "value": "/{{run_id}}", "placeholders": [{ "name": "run_id", "type": "String", "description": "ID of the run.", "required": true }] } },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"assistant_id\": \"{{assistant_id}}\"}",
          "placeholders": [
            { "name": "assistant_id", "type": "String", "description": "ID of the assistant to run.", "required": true }
          ]
        }
      },
      "delete": { "method": "POST", "path": { "value": "/{{run_id}}/cancel", "placeholders": [{ "name": "run_id", "type": "String", "description": "ID of the run to cancel.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "thread.run.created", "path": "/webhooks/chatgpt/thread-run-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Run identifier." } },
          { "name": "thread_id", "type": "String", "selector": ["thread_id"], "meta": { "description": "ID of the thread." } },
          { "name": "assistant_id", "type": "String", "selector": ["assistant_id"], "meta": { "description": "ID of the assistant used." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Run status." } },
          { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of creation." } }
        ]
      },
      {
        "event": "thread.run.completed", "path": "/webhooks/chatgpt/thread-run-completed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Run identifier." } },
          { "name": "thread_id", "type": "String", "selector": ["thread_id"], "meta": { "description": "ID of the thread." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Run status, always 'completed'." } },
          { "name": "usage", "type": "Object", "selector": ["usage"], "meta": { "description": "Token usage for the run." } },
          { "name": "completed_at", "type": "Integer", "selector": ["completed_at"], "meta": { "description": "Unix timestamp of completion." } }
        ]
      },
      {
        "event": "thread.run.failed", "path": "/webhooks/chatgpt/thread-run-failed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Run identifier." } },
          { "name": "thread_id", "type": "String", "selector": ["thread_id"], "meta": { "description": "ID of the thread." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Run status, always 'failed'." } },
          { "name": "last_error", "type": "Object", "selector": ["last_error"], "meta": { "description": "Error details." } }
        ]
      },
      {
        "event": "thread.run.requires_action", "path": "/webhooks/chatgpt/thread-run-requires-action",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Run identifier." } },
          { "name": "thread_id", "type": "String", "selector": ["thread_id"], "meta": { "description": "ID of the thread." } },
          { "name": "required_action", "type": "Object", "selector": ["required_action"], "meta": { "description": "Action details required from the user." } }
        ]
      },
      {
        "event": "thread.run.cancelled", "path": "/webhooks/chatgpt/thread-run-cancelled",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Run identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Run status, always 'cancelled'." } }
        ]
      },
      {
        "event": "thread.run.expired", "path": "/webhooks/chatgpt/thread-run-expired",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Run identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Run status, always 'expired'." } }
        ]
      }
    ]
  },
  {
    "handle": "vector_stores",
    "meta": {
      "short": "Vector Stores",
      "description": "Create and manage vector stores for file search with Assistants."
    },
    "endpoint": {
      "value": "/vector_stores"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the vector store." } },
      { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'vector_store'." } },
      { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Name of the vector store." } },
      { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Status (e.g., expired, in_progress, completed)." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of when the vector store was created." } },
      { "name": "file_counts_total", "type": "Integer", "selector": ["file_counts", "total"], "meta": { "description": "Total number of files in the store." } },
      { "name": "usage_bytes", "type": "Integer", "selector": ["usage_bytes"], "meta": { "description": "Storage used in bytes." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" }, "queryParams": { "limit": { "value": "20" }, "order": { "value": "desc" } } },
      "read": { "method": "GET", "path": { "value": "/{{vector_store_id}}", "placeholders": [{ "name": "vector_store_id", "type": "String", "description": "ID of the vector store.", "required": true }] } },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\"}",
          "placeholders": [
            { "name": "name", "type": "String", "description": "Name of the vector store.", "required": false }
          ]
        }
      },
      "update": {
        "method": "POST",
        "path": { "value": "/{{vector_store_id}}", "placeholders": [{ "name": "vector_store_id", "type": "String", "description": "ID of the vector store.", "required": true }] },
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\"}",
          "placeholders": [{ "name": "name", "type": "String", "description": "New name for the vector store.", "required": false }]
        }
      },
      "delete": { "method": "DELETE", "path": { "value": "/{{vector_store_id}}", "placeholders": [{ "name": "vector_store_id", "type": "String", "description": "ID of the vector store to delete.", "required": true }] } }
    },
    "webhooks": [
      {
        "event": "vector_store.created", "path": "/webhooks/chatgpt/vector-store-created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Vector store identifier." } },
          { "name": "object", "type": "String", "selector": ["object"], "meta": { "description": "Object type, always 'vector_store'." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Vector store name." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Initial status." } },
          { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "Unix timestamp of creation." } }
        ]
      },
      {
        "event": "vector_store.completed", "path": "/webhooks/chatgpt/vector-store-completed",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Vector store identifier." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Status, always 'completed'." } },
          { "name": "file_counts_total", "type": "Integer", "selector": ["file_counts", "total"], "meta": { "description": "Total files included." } },
          { "name": "usage_bytes", "type": "Integer", "selector": ["usage_bytes"], "meta": { "description": "Storage used in bytes." } }
        ]
      },
      {
        "event": "vector_store.deleted", "path": "/webhooks/chatgpt/vector-store-deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Vector store identifier." } },
          { "name": "deleted", "type": "Boolean", "selector": ["deleted"], "meta": { "description": "Whether the store was successfully deleted." } }
        ]
      }
    ]
  }
]

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Analyze Images

ChatGPT Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/WGWIgassTpoesmt8hzZy" alt="" width="188"><figcaption></figcaption></figure>

<p align="center">The Analyze Images action processes and analyzes images (e.g., for content, objects, or metadata).</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to analyze images using an external service so that I can extract features like objects, faces, and text from the images.

#### Fields

| Field Name     | Field Type | Required |
| -------------- | ---------- | -------- |
| imageUrl       | String     | Yes      |
| features       | String     | No       |
| analysisResult | String     | No       |

### Related Connections

[ChatGPT](/human-connections/chatgpt/chatgpt)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "analyze-images",
  "state": "inDev",
  "meta": {
    "short": "Analyze Images",
    "description": "Analyze images using an external service."
  },
  "input": [
    {
      "name": "imageUrl",
      "type": "String",
      "required": true,
      "meta": {
        "description": "URL of the image to analyze."
      }
    },
    {
      "name": "features",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Features to analyze in the image, e.g., objects, faces, text."
      }
    }
  ],
  "output": [
    {
      "name": "analysisResult",
      "type": "String",
      "selector": ["result"],
      "meta": {
        "description": "The analysis result from the external service."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/vision/analyze",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"imageUrl\": \"{{imageUrl}}\", \"features\": \"{{features}}\"}",
          "placeholders": [
            {
              "name": "imageUrl",
              "type": "String",
              "description": "URL of the image to analyze.",
              "required": true
            },
            {
              "name": "features",
              "type": "String",
              "description": "Features to analyze in the image.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Analyze Text

ChatGPT Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/WGWIgassTpoesmt8hzZy" alt="" width="188"><figcaption></figcaption></figure>

<p align="center">The Analyze Text action processes and analyzes text content (e.g., for sentiment, keywords, or structure).</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to analyze text using ChatGPT so that I can quickly extract insights or summarize content.

#### Fields

| Field Name   | Field Type | Required |
| ------------ | ---------- | -------- |
| text         | String     | Yes      |
| analysisType | String     | No       |

### Related Connections

[ChatGPT](/human-connections/chatgpt/chatgpt)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "analyze-text",
  "state": "inDev",
  "meta": {
    "short": "Analyze Text",
    "description": "Analyze the given text using ChatGPT to extract insights, summarize content, or perform other text analysis tasks."
  },
  "input": [
    {
      "name": "text",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The text to be analyzed."
      }
    },
    {
      "name": "analysisType",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The type of analysis to perform (e.g., summarize, sentiment, entities).",
        "default": "summarize"
      }
    }
  ],
  "output": [
    {
      "name": "result",
      "type": "String",
      "selector": ["choices", "0", "message", "content"],
      "meta": {
        "description": "The analyzed result from ChatGPT."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/chat/completions",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"model\": \"gpt-3.5-turbo\", \"messages\": [{\"role\": \"user\", \"content\": \"Analyze the following text: {{text}}. Perform {{analysisType}} analysis.\"}]}",
          "placeholders": [
            {
              "name": "text",
              "type": "String",
              "description": "The text to be analyzed.",
              "required": true
            },
            {
              "name": "analysisType",
              "type": "String",
              "description": "The type of analysis to perform.",
              "required": false,
              "default": "summarize"
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Embedding

ChatGPT Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/WGWIgassTpoesmt8hzZy" alt="" width="188"><figcaption></figcaption></figure>

<p align="center">The Create Embedding action generates a vector embedding (numerical representation) from input text.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to generate an embedding for a given input text so that I can use it for machine learning tasks.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| input      | String     | Yes      |

### Related Connections

[ChatGPT](/human-connections/chatgpt/chatgpt)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-embedding",
  "state": "inDev",
  "meta": {
    "short": "Create Embedding",
    "description": "Generate an embedding for a given input text using the external service."
  },
  "input": [
    {
      "name": "input",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The input text to generate an embedding for."
      }
    }
  ],
  "output": [
    {
      "name": "embedding",
      "type": "Array",
      "selector": ["data", "embedding"],
      "meta": {
        "description": "The generated embedding for the input text."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/embeddings",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"input\": \"{{input}}\", \"model\": \"text-embedding-ada-002\"}",
          "placeholders": [
            {
              "name": "input",
              "type": "String",
              "description": "The input text to generate an embedding for.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Transcription

ChatGPT Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/WGWIgassTpoesmt8hzZy" alt="" width="188"><figcaption></figcaption></figure>

<p align="center">The Create Transcription action converts audio or video files into written text.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to transcribe an audio file so that I can have a text version of the audio content.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| audioFile  | String     | Yes      |
| language   | String     | No       |

### Related Connections

[ChatGPT](/human-connections/chatgpt/chatgpt)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-transcription",
  "state": "inDev",
  "meta": {
    "short": "Create Transcription",
    "description": "Creates a transcription from an audio file using the OpenAI Whisper API."
  },
  "input": [
    {
      "name": "audioFile",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The audio file to transcribe."
      }
    },
    {
      "name": "language",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The language of the audio file (optional)."
      }
    }
  ],
  "output": [
    {
      "name": "transcription",
      "type": "String",
      "selector": ["transcription"],
      "meta": {
        "description": "The transcribed text from the audio file."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/audio/transcriptions",
        "headers": {
          "Content-Type": "multipart/form-data"
        },
        "bodyTemplate": {
          "value": "--boundary\nContent-Disposition: form-data; name=\"file\"; filename=\"audio.mp3\"\nContent-Type: audio/mpeg\n\n{{audioFile}}\n--boundary\nContent-Disposition: form-data; name=\"language\"\n\n{{language}}\n--boundary--",
          "placeholders": [
            {
              "name": "audioFile",
              "type": "String",
              "description": "The audio file to transcribe.",
              "required": true
            },
            {
              "name": "language",
              "type": "String",
              "description": "The language of the audio file (optional).",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Claude AI

Claude AI Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<h3 align="center">Put Claude AI to Work with @Human Automations and @Human Agents</h3>

<p align="center">The Claude AI Connection documents all Triggers, Actions and Query Operations available for creating automations via the Claude AI API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the Asana Connection?

* Connect to the Claude AI API in a few clicks
* Use the related Claude AI Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Message Created**

Triggers on: messages/created

Triggered when a new message is successfully generated and created in Claude AI.

**Message Batch Ended**

Triggers on: message\_batches/ended

Triggered when an asynchronous message batch has finished processing.

**Message Batch Expired**

Triggers on: message\_batches/expired

Triggered when a message batch has reached its expiration time before completion.

**Model Created**

Triggers on: models/created

Triggered when a new AI model is added and becomes available in the system.

**File Created**

Triggers on: files/created

Triggered when a new file is successfully uploaded and processed.

**File Deleted**

Triggers on: files/deleted

Triggered when an existing file is removed from the system.

**Skill Created**

Triggers on: skills/created

Triggered when a new custom agent skill is successfully defined.

**Skill Deleted**

Triggers on: skills/deleted

Triggered when a custom agent skill is removed.

#### Action Operations

[Action: Send Message](/human-connections/claude-ai/claude-ai/action-send-message)

[Action: Send Message Batch](/human-connections/claude-ai/claude-ai/action-send-message-batch)

[Action: Estimate Token Usage](/human-connections/claude-ai/claude-ai/action-estimate-token-usage)

[Action: Upload File](/human-connections/claude-ai/claude-ai/action-upload-file)

[Action: Create Skill](/human-connections/claude-ai/claude-ai/action-create-skill)

#### Query Operations

[Query: List Models](/human-connections/claude-ai/claude-ai/query-list-models)

[Query: List Files](/human-connections/claude-ai/claude-ai/query-list-files)

[Query: List Skills](/human-connections/claude-ai/claude-ai/query-list-skills)

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **system-to-system Personal Access Token (PAT)** for **Anthropic**, follow these steps:

#### **Prerequisites**

* An **Anthropic account** (sign up at [Anthropic Console](https://console.anthropic.com/) if needed).
* **Admin or Developer access** to generate API keys.

#### **Steps to Generate a PAT**

1. **Log in** to the [Anthropic Console](https://console.anthropic.com/).
2. Navigate to **"API Keys"** (under **Manage**).
3. Click **"Create Key"**.
4. Provide a **name/description** (e.g., "System-to-System Access").
5. Click **"Add"**.
6. **Copy the generated key** (this is your PAT—store it securely).

### Configuring Webhooks

1. **Set up a webhook trigger** on your chosen automation platform to receive external data.
2. **Configure an action** that uses the Claude AI API (passing your PAT generated above).
3. **Implement a polling mechanism** if you need to monitor asynchronous operations, such as the **Message Batches API**.
4. **Check the status** of your batch requests periodically via the `GET /v1/messages/batches/{batch_id}` endpoint.
5. **Trigger downstream actions** once the `processing_status` returns as `ended`.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "claude-api",
  "status": "active",
  "meta": {
    "short": "Claude API",
    "description": "Connects to Anthropic's Claude API for natural language processing and AI-driven text generation.",
    "icon": "claude",
    "tags": ["AI", "NLP", "API", "Anthropic"]
  },
  "service": {
    "baseURL": {
      "value": "https://api.anthropic.com/v1"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "anthropic-version": {
        "value": "2023-06-01"
      },
      "x-api-key": {
        "value": "{{apiKey}}"
      }
    },
    "auth": {
      "method": "api_token",
      "params": {
        "apiToken": {
          "token": {
            "value": "{{apiKey}}"
          },
          "headerName": {
            "value": "x-api-key"
          }
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

````
Available resources: messages, message_batches, models, files, skills.

| Handle | Endpoint | Operations |
|---|---|---|
| `messages` | `/messages` | create |
| `message_batches` | `/messages/batches` | list, read, create, delete |
| `models` | `/models` | list, read |
| `files` | `/files` | list, read, delete |
| `skills` | `/skills` | list, read, delete |

```json
[
  {
    "handle": "messages",
    "meta": { "short": "Messages", "description": "Send messages to Claude and count tokens." },
    "endpoint": { "value": "/messages" },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the message." } },
      { "name": "content", "type": "String", "selector": ["content", 0, "text"], "meta": { "description": "Generated content text." } },
      { "name": "role", "type": "String", "selector": ["role"], "meta": { "description": "Role of the sender." } },
      { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "Model used." } },
      { "name": "stop_reason", "type": "String", "selector": ["stop_reason"], "meta": { "description": "Reason for stopping generation." } },
      { "name": "stop_sequence", "type": "String", "selector": ["stop_sequence"], "meta": { "description": "Sequence that caused generation to stop." } },
      { "name": "usage_input_tokens", "type": "Integer", "selector": ["usage", "input_tokens"], "meta": { "description": "Number of input tokens." } },
      { "name": "usage_output_tokens", "type": "Integer", "selector": ["usage", "output_tokens"], "meta": { "description": "Number of output tokens." } }
    ],
    "operations": {
      "create": {
        "method": "POST", "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"model\": \"{{model}}\", \"max_tokens\": {{max_tokens}}, \"messages\": [{\"role\": \"user\", \"content\": \"{{content}}\"}]}",
          "placeholders": [
            { "name": "model", "type": "String", "description": "Model to use.", "required": true },
            { "name": "max_tokens", "type": "Integer", "description": "Maximum tokens to generate.", "required": true },
            { "name": "content", "type": "String", "description": "User message content.", "required": true }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "messages.created", "path": "/webhooks/claude-api/messages.created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the message." } },
          { "name": "content", "type": "String", "selector": ["content", 0, "text"], "meta": { "description": "Generated content text." } },
          { "name": "role", "type": "String", "selector": ["role"], "meta": { "description": "Role of the sender." } },
          { "name": "model", "type": "String", "selector": ["model"], "meta": { "description": "Model used." } },
          { "name": "usage_input_tokens", "type": "Integer", "selector": ["usage", "input_tokens"], "meta": { "description": "Number of input tokens." } },
          { "name": "usage_output_tokens", "type": "Integer", "selector": ["usage", "output_tokens"], "meta": { "description": "Number of output tokens." } }
        ]
      }
    ]
  },
  {
    "handle": "message_batches",
    "meta": { "short": "Message Batches", "description": "Process large volumes of Messages requests asynchronously with a cost reduction." },
    "endpoint": { "value": "/messages/batches" },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the batch." } },
      { "name": "processing_status", "type": "String", "selector": ["processing_status"], "meta": { "description": "Status of the batch processing." } },
      { "name": "ended_at", "type": "DateTime", "selector": ["ended_at"], "meta": { "description": "Timestamp when the batch ended." } },
      { "name": "created_at", "type": "DateTime", "selector": ["created_at"], "meta": { "description": "Timestamp when the batch was created." } },
      { "name": "expires_at", "type": "DateTime", "selector": ["expires_at"], "meta": { "description": "Timestamp when the batch expires." } },
      { "name": "results_url", "type": "String", "selector": ["results_url"], "meta": { "description": "URL to download the batch results." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" } },
      "read": {
        "method": "GET", "path": { "value": "/{{batch_id}}", "placeholders": [{ "name": "batch_id", "type": "String", "description": "ID of the batch.", "required": true }] }
      },
      "create": {
        "method": "POST", "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"requests\": [{\"custom_id\": \"{{custom_id}}\", \"params\": {\"model\": \"{{model}}\", \"max_tokens\": {{max_tokens}}, \"messages\": [{\"role\": \"user\", \"content\": \"{{content}}\"}]}}]}",
          "placeholders": [
            { "name": "custom_id", "type": "String", "description": "Your internal ID for the request.", "required": true },
            { "name": "model", "type": "String", "description": "Model to use.", "required": true },
            { "name": "max_tokens", "type": "Integer", "description": "Maximum tokens to generate.", "required": true },
            { "name": "content", "type": "String", "description": "User message content.", "required": true }
          ]
        }
      },
      "delete": {
        "method": "POST", "path": { "value": "/{{batch_id}}/cancel", "placeholders": [{ "name": "batch_id", "type": "String", "description": "ID of the batch to cancel.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "message_batches.ended", "path": "/webhooks/claude-api/message_batches.ended",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the batch." } },
          { "name": "processing_status", "type": "String", "selector": ["processing_status"], "meta": { "description": "Status of the batch processing." } },
          { "name": "ended_at", "type": "DateTime", "selector": ["ended_at"], "meta": { "description": "Timestamp when the batch ended." } },
          { "name": "results_url", "type": "String", "selector": ["results_url"], "meta": { "description": "URL to download the batch results." } }
        ]
      },
      {
        "event": "message_batches.expired", "path": "/webhooks/claude-api/message_batches.expired",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the batch." } },
          { "name": "expires_at", "type": "DateTime", "selector": ["expires_at"], "meta": { "description": "Timestamp when the batch expires." } }
        ]
      }
    ]
  },
  {
    "handle": "models",
    "meta": { "short": "Models", "description": "List available Claude models and their details." },
    "endpoint": { "value": "/models" },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Model identifier." } },
      { "name": "display_name", "type": "String", "selector": ["display_name"], "meta": { "description": "Human-readable name of the model." } },
      { "name": "created_at", "type": "DateTime", "selector": ["created_at"], "meta": { "description": "When the model was created." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" } },
      "read": {
        "method": "GET", "path": { "value": "/{{model_id}}", "placeholders": [{ "name": "model_id", "type": "String", "description": "Specific model identifier (e.g., claude-3-opus-20240229).", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "models.created", "path": "/webhooks/claude-api/models.created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Model identifier." } },
          { "name": "display_name", "type": "String", "selector": ["display_name"], "meta": { "description": "Human-readable name of the model." } },
          { "name": "created_at", "type": "DateTime", "selector": ["created_at"], "meta": { "description": "When the model was created." } }
        ]
      }
    ]
  },
  {
    "handle": "files",
    "meta": { "short": "Files", "description": "Upload and manage files for use across multiple API calls." },
    "endpoint": { "value": "/files" },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the file." } },
      { "name": "file_name", "type": "String", "selector": ["file_name"], "meta": { "description": "Name of the file." } },
      { "name": "purpose", "type": "String", "selector": ["purpose"], "meta": { "description": "Purpose of the file." } },
      { "name": "bytes", "type": "Integer", "selector": ["bytes"], "meta": { "description": "Size of the file in bytes." } },
      { "name": "created_at", "type": "DateTime", "selector": ["created_at"], "meta": { "description": "Timestamp when the file was uploaded." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" } },
      "read": {
        "method": "GET", "path": { "value": "/{{file_id}}", "placeholders": [{ "name": "file_id", "type": "String", "description": "ID of the file to retrieve.", "required": true }] }
      },
      "delete": {
        "method": "DELETE", "path": { "value": "/{{file_id}}", "placeholders": [{ "name": "file_id", "type": "String", "description": "ID of the file to delete.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "files.created", "path": "/webhooks/claude-api/files.created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the file." } },
          { "name": "file_name", "type": "String", "selector": ["file_name"], "meta": { "description": "Name of the file." } },
          { "name": "purpose", "type": "String", "selector": ["purpose"], "meta": { "description": "Purpose of the file." } },
          { "name": "created_at", "type": "DateTime", "selector": ["created_at"], "meta": { "description": "Timestamp when the file was uploaded." } }
        ]
      },
      {
        "event": "files.deleted", "path": "/webhooks/claude-api/files.deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the file." } }
        ]
      }
    ]
  },
  {
    "handle": "skills",
    "meta": { "short": "Skills", "description": "Create and manage custom agent skills." },
    "endpoint": { "value": "/skills" },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the skill." } },
      { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Name of the skill." } },
      { "name": "description", "type": "String", "selector": ["description"], "meta": { "description": "Description of the skill." } },
      { "name": "created_at", "type": "DateTime", "selector": ["created_at"], "meta": { "description": "Timestamp when the skill was created." } }
    ],
    "operations": {
      "list": { "method": "GET", "path": { "value": "" } },
      "read": {
        "method": "GET", "path": { "value": "/{{skill_id}}", "placeholders": [{ "name": "skill_id", "type": "String", "description": "ID of the skill to retrieve.", "required": true }] }
      },
      "delete": {
        "method": "DELETE", "path": { "value": "/{{skill_id}}", "placeholders": [{ "name": "skill_id", "type": "String", "description": "ID of the skill to delete.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "skills.created", "path": "/webhooks/claude-api/skills.created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the skill." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Name of the skill." } },
          { "name": "created_at", "type": "DateTime", "selector": ["created_at"], "meta": { "description": "Timestamp when the skill was created." } }
        ]
      },
      {
        "event": "skills.deleted", "path": "/webhooks/claude-api/skills.deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Unique identifier for the skill." } }
        ]
      }
    ]
  }
]

````

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Send Message

Claude AI Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<p align="center">Send chat-style messages to Claude for conversational and task-oriented interactions</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a user, I want to send a message using the Claude API so that I can generate responses based on my prompts.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| model       | String     | Yes      |
| prompt      | String     | Yes      |
| max\_tokens | Integer    | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "send-message",
  "state": "inDev",
  "meta": {
    "short": "Send Message",
    "description": "Send a message using the Claude API"
  },
  "input": [
    {
      "name": "model",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The model to use for generating the message"
      }
    },
    {
      "name": "prompt",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The prompt to send to the model"
      }
    },
    {
      "name": "max_tokens",
      "type": "Integer",
      "required": false,
      "meta": {
        "description": "The maximum number of tokens to generate"
      }
    }
  ],
  "output": [
    {
      "name": "response",
      "type": "String",
      "selector": ["completion"],
      "meta": {
        "description": "The generated message response"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/message",
        "headers": {
          "Content-Type": "application/json",
          "x-api-key": "{{.apiKey}}"
        },
        "bodyTemplate": {
          "value": "{\"model\": \"{{.model}}\", \"prompt\": \"{{.prompt}}\", \"max_tokens\": {{.max_tokens}}}",
          "placeholders": [
            {
              "name": "model",
              "type": "String",
              "description": "The model to use for generating the message",
              "required": true
            },
            {
              "name": "prompt",
              "type": "String",
              "description": "The prompt to send to the model",
              "required": true
            },
            {
              "name": "max_tokens",
              "type": "Integer",
              "description": "The maximum number of tokens to generate",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Send Message Batch

Claude AI Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<p align="center">Send a batch of message to Claude AI</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a user, I want to send a batch of messages to the Claude API so that I can efficiently process multiple requests in a single operation.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| messages    | Array      | Yes      |
| model       | String     | No       |
| max\_tokens | Integer    | No       |
| responses   | Array      | -        |
| status      | String     | -        |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "post-messages-batches",
  "state": "inDev",
  "meta": {
    "short": "Post Messages Batches",
    "description": "Send a batch of messages via the Claude API"
  },
  "input": [
    {
      "name": "messages",
      "type": "Array",
      "required": true,
      "meta": {
        "description": "Array of message objects to send in the batch"
      }
    },
    {
      "name": "model",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Model to use for generating responses",
        "default": "claude-3-opus-20240229"
      }
    },
    {
      "name": "max_tokens",
      "type": "Integer",
      "required": false,
      "meta": {
        "description": "Maximum number of tokens to generate",
        "default": "4096"
      }
    }
  ],
  "output": [
    {
      "name": "responses",
      "type": "Array",
      "selector": ["responses"],
      "meta": {
        "description": "Array of generated responses"
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "Status of the batch processing"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/messages/batches",
        "headers": {
          "Content-Type": "application/json",
          "Accept": "application/json",
          "anthropic-version": "2023-06-01"
        },
        "bodyTemplate": {
          "value": "{\"messages\": {{.messages}}, \"model\": \"{{.model}}\", \"max_tokens\": {{.max_tokens}}}",
          "placeholders": [
            {
              "name": "messages",
              "type": "Array",
              "description": "Array of message objects",
              "required": true
            },
            {
              "name": "model",
              "type": "String",
              "description": "Model identifier",
              "required": false,
              "default": "claude-3-opus-20240229"
            },
            {
              "name": "max_tokens",
              "type": "Integer",
              "description": "Maximum tokens to generate",
              "required": false,
              "default": "4096"
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Estimate Token Usage

Claude AI Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<p align="center">Estimate token usage for a given prompt or conversation before actually calling the model, to manage cost and respect rate limits</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a user, I want to count the number of tokens in my text so that I can ensure it fits within the allowed limit for the Claude API.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| text       | String     | Yes      |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "count-tokens",
  "state": "inDev",
  "meta": {
    "short": "Count Tokens",
    "description": "Counts the number of tokens in a given text using the Claude API."
  },
  "input": [
    {
      "name": "text",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The text to count tokens for."
      }
    }
  ],
  "output": [
    {
      "name": "tokenCount",
      "type": "Integer",
      "selector": ["count"],
      "meta": {
        "description": "The number of tokens in the provided text."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/messages/count_tokens",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"text\": \"{{text}}\"}",
          "placeholders": [
            {
              "name": "text",
              "type": "String",
              "description": "The text to count tokens for.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Upload File

Claude AI Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<p align="center">Upload a file to the Claude API</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a developer, I want to upload a file to the Claude API so that I can use it for fine-tuning or other purposes.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| file       | File       | Yes      |
| purpose    | String     | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "upload-file",
  "state": "inDev",
  "meta": {
    "short": "Upload File",
    "description": "Uploads a file to the Claude API."
  },
  "input": [
    {
      "name": "file",
      "type": "File",
      "required": true,
      "meta": {
        "description": "The file to upload."
      }
    },
    {
      "name": "purpose",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The intended purpose of the uploaded file.",
        "default": "fine-tune"
      }
    }
  ],
  "output": [
    {
      "name": "id",
      "type": "String",
      "selector": ["id"],
      "meta": {
        "description": "The unique identifier of the uploaded file."
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the uploaded file."
      }
    },
    {
      "name": "bytes",
      "type": "Integer",
      "selector": ["bytes"],
      "meta": {
        "description": "The size of the uploaded file in bytes."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/files",
        "headers": {
          "Content-Type": "multipart/form-data"
        },
        "bodyTemplate": {
          "value": "--boundary\\r\\nContent-Disposition: form-data; name=\"file\"; filename=\"{{file.name}}\"\\r\\nContent-Type: {{file.type}}\\r\\n\\r\\n{{file.content}}\\r\\n--boundary--\\r\\n--boundary\\r\\nContent-Disposition: form-data; name=\"purpose\"\\r\\n\\r\\n{{purpose}}\\r\\n--boundary--",
          "placeholders": [
            {
              "name": "file",
              "type": "File",
              "description": "The file to upload.",
              "required": true
            },
            {
              "name": "purpose",
              "type": "String",
              "description": "The intended purpose of the uploaded file.",
              "required": false,
              "default": "fine-tune"
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Skill

Claude AI Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<p align="center">Creates a new skill in the Claude API</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a user, I want to create a new skill in the Claude API so that I can automate specific tasks.

#### Fields

| Field Name   | Field Type | Required |
| ------------ | ---------- | -------- |
| name         | String     | Yes      |
| description  | String     | No       |
| instructions | String     | Yes      |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-skill",
  "state": "inDev",
  "meta": {
    "short": "Create Skill",
    "description": "Creates a new skill in the Claude API."
  },
  "input": [
    {
      "name": "name",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the skill."
      }
    },
    {
      "name": "description",
      "type": "String",
      "required": false,
      "meta": {
        "description": "A description of the skill."
      }
    },
    {
      "name": "instructions",
      "type": "String",
      "required": true,
      "meta": {
        "description": "Instructions for the skill."
      }
    }
  ],
  "output": [
    {
      "name": "skillId",
      "type": "String",
      "selector": ["id"],
      "meta": {
        "description": "The ID of the created skill."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v1/skills",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\", \"description\": \"{{description}}\", \"instructions\": \"{{instructions}}\"}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The name of the skill.",
              "required": true
            },
            {
              "name": "description",
              "type": "String",
              "description": "A description of the skill.",
              "required": false
            },
            {
              "name": "instructions",
              "type": "String",
              "description": "Instructions for the skill.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Query: List Models

Claude AI Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<p align="center">Retrieves a list of Claude models available from the Claude API</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a developer, I want to retrieve a list of available models from the Claude API so that I can choose the appropriate model for my application.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| models     | Array      | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "get-models",
  "state": "inDev",
  "meta": {
    "short": "Get Models",
    "description": "Retrieves a list of available models from the Claude API."
  },
  "input": [],
  "output": [
    {
      "name": "models",
      "type": "Array",
      "selector": ["data"],
      "meta": {}
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": "/v1/models",
        "headers": {
          "Content-Type": "application/json",
          "Accept": "application/json"
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": ""
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Query: List Files

Claude AI Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<p align="center">Retrives a list of files from the external service</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a user, I want to retrieve a list of files from the external service so that I can view and manage them.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| limit      | Integer    | No       |
| offset     | Integer    | No       |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "get-files",
  "state": "inDev",
  "meta": {
    "short": "Get Files",
    "description": "Retrieves a list of files from the external service."
  },
  "input": [
    {
      "name": "limit",
      "type": "Integer",
      "required": false,
      "meta": {
        "description": "Maximum number of files to return."
      }
    },
    {
      "name": "offset",
      "type": "Integer",
      "required": false,
      "meta": {
        "description": "Offset for pagination."
      }
    }
  ],
  "output": [
    {
      "name": "files",
      "type": "Array",
      "selector": ["data"],
      "meta": {
        "description": "List of files retrieved from the service."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": "/v1/files",
        "queryParams": {
          "limit": "{{limit}}",
          "offset": "{{offset}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Query: List Skills

Claude AI Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/sQzwwa4W9NWTWOhdafeH" alt=""><figcaption></figcaption></figure>

<p align="center">Retrieves a list of skills available from the Claude API</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

As a developer, I want to retrieve a list of available skills from the Claude API so that I can integrate them into my application.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| apiKey     | String     | Yes      |

### Related Connections

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
// Some code
{
  "handle": "get-skills",
  "state": "inDev",
  "meta": {
    "short": "Get Skills",
    "description": "Retrieves a list of available skills from the Claude API."
  },
  "input": [
    {
      "name": "apiKey",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The API key for authenticating with the Claude API."
      }
    }
  ],
  "output": [
    {
      "name": "skills",
      "type": "Array",
      "selector": ["skills"],
      "meta": {
        "description": "List of available skills."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": "/v1/skills",
        "headers": {
          "Content-Type": "application/json"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Datadog

Datadog Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/vZ8ipwxyr9F6k6pQq8ry" alt="" width="250"><figcaption></figcaption></figure>

<h3 align="center">Put Datadog to Work with @Human Automations and @Human Agents</h3>

<p align="center">The Datadog Connection documents all Triggers, Actions and Query Operations available for creating automations via the Datadog API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the Datadog Connection?

* Connect to the Datadog API in a few clicks
* Use the related Datadog Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Metric Alert**

Triggers on: metrics/metric\_alert

Triggered when a metric alert is fired in Datadog.

**Event Created**

Triggers on: events/event\_created

Triggered when a new event is created in the Datadog event stream.

**Monitor Alert**

Triggers on: monitors/monitor\_alert

Triggered when a monitor enters an alert state.

**Monitor Recovery**

Triggers on: monitors/monitor\_recovery

Triggered when a monitor recovers from an alert or warning state.

**Dashboard Created**

Triggers on: dashboards/dashboard\_created

Triggered when a new dashboard is created in Datadog.

**Dashboard Updated**

Triggers on: dashboards/dashboard\_updated

Triggered when an existing dashboard is modified.

**Downtime Started**

Triggers on: downtimes/downtime\_started

Triggered when a scheduled downtime period begins.

**Downtime Ended**

Triggers on: downtimes/downtime\_ended

Triggered when a scheduled downtime period concludes.

**Host Status Changed**

Triggers on: hosts/host\_status\_changed

Triggered when the reporting status of a host changes.

**Service Check Alert**

Triggers on: service\_checks/service\_check\_alert

Triggered when a service check results in an alert status.

**Log Alert**

Triggers on: logs/log\_alert

Triggered when a log-based monitor alert is fired.

**Synthetic Test Result**

Triggers on: synthetics/synthetic\_test\_result

Triggered when a synthetic test provides a pass or fail result.

**SLO Alert**

Triggers on: slos/slo\_alert

Triggered when a Service Level Objective alert is triggered.

**User Created**

Triggers on: users/user\_created

Triggered when a new user is invited or created in the organization.

**Organization Updated**

Triggers on: organizations/organization\_updated

Triggered when the organization settings or metadata are updated.

Example link

#### Action Operations

[Action: New Metric Post](/human-connections/datadog/datadog/action-new-metric-post)

[Action: API Request](/human-connections/datadog/datadog/action-api-request)

#### Query Operations

Example link

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **System-to-System Personal Access Token (PAT)** for **Datadog**, follow these steps:

#### **Prerequisites**

* A **Datadog account** with **Admin** or **API Key management** permissions.
* Access to the **Datadog UI** ([app.datadoghq.com](https://app.datadoghq.com)).

#### **Steps to Generate a PAT**

1. **Log in** to the Datadog UI.
2. Navigate to: **Organization Settings** → **API Keys** (or directly visit: <https://app.datadoghq.com/organization-settings/api-keys>).
3. Under the **Personal Access Tokens** section, click **+ New Personal Access Token**.
4. Provide:
   * **Token Name** (descriptive, e.g., `system-to-system-integration`).
   * **Scopes** (select required permissions, e.g., `api_key_read`, `api_key_write`, `dashboards_read`, etc.).
5. Click **Create Token**.
6. **Copy the generated token immediately** (it will **not** be shown again).

**Done.** Use this token for system-to-system authentication.

### Configuring Webhooks

1. **Log in** to your Datadog account.
2. Navigate to **Integrations** → **Integrations** in the left-hand sidebar.
3. Search for **Webhooks** in the search bar and click on the **Webhooks** tile.
4. If the integration is not installed, click **Install**. If it is already installed, click **Configure**.
5. Scroll down to the **Webhooks** section and click **New Webhook**.
6. Provide a **Name** for the webhook (e.g., `human-webhook`).
7. Enter the **URL** provided by your integration (e.g., `https://your-endpoint.com/webhook`).
8. (Optional) Define a custom **Payload** or add **Custom Headers** if required.
9. Click **Save**.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "datadog",
  "status": "active",
  "meta": {
    "short": "Datadog",
    "description": "Connect to Datadog for monitoring, analytics, and event tracking.",
    "icon": "datadog",
    "tags": ["monitoring", "analytics", "events", "devops", "observability"]
  },
  "service": {
    "baseURL": {
      "value": "https://api.{{region}}.datadoghq.com",
      "placeholders": [
        {
          "name": "region",
          "type": "String",
          "description": "Datadog site region (e.g., datadoghq.com → us1, datadoghq.eu → eu1).",
          "required": true
        }
      ]
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "DD-API-KEY": {
        "value": "{{apiKey}}",
        "placeholders": [
          {
            "name": "apiKey",
            "type": "String",
            "description": "Datadog API key.",
            "required": true
          }
        ]
      },
      "DD-APPLICATION-KEY": {
        "value": "{{appKey}}",
        "placeholders": [
          {
            "name": "appKey",
            "type": "String",
            "description": "Datadog application key (required for read/write operations beyond metrics submission).",
            "required": false
          }
        ]
      }
    },
    "auth": {
      "method": "api_token",
      "params": {
        "apiToken": {
          "token": {
            "value": "{{apiKey}}"
          },
          "headerName": {
            "value": "DD-API-KEY"
          }
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```
[
  {
    "handle": "metrics",
    "meta": {
      "short": "Metrics",
      "description": "Submit and query time-series metric data points."
    },
    "endpoint": {
      "value": "/api/v2/metrics"
    },
    "fields": [
      { "name": "metric", "type": "String", "selector": ["metric"], "meta": { "description": "The metric name." } },
      { "name": "type", "type": "Integer", "selector": ["type"], "meta": { "description": "Metric type: 0=unspecified, 1=count, 2=rate, 3=gauge." } },
      { "name": "unit", "type": "String", "selector": ["unit"], "meta": { "description": "Human-readable unit of the metric." } },
      { "name": "description", "type": "String", "selector": ["description"], "meta": { "description": "Description of the metric." } },
      { "name": "integration", "type": "String", "selector": ["integration"], "meta": { "description": "Integration that generated the metric." } },
      { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags associated with the metric." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "" },
        "queryParams": {
          "filter[metric_type]": { "value": "{{metric_type}}", "placeholders": [{ "name": "metric_type", "type": "String", "description": "Filter by metric type (gauge, count, rate).", "required": false }] }
        }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{metric_name}}", "placeholders": [{ "name": "metric_name", "type": "String", "description": "The metric name.", "required": true }] }
      },
      "create": {
        "method": "POST",
        "path": { "value": "/api/v1/series" },
        "bodyTemplate": {
          "value": "{\"series\":[{\"metric\":\"{{metric_name}}\",\"type\":\"{{type}}\",\"points\":[[{{timestamp}},{{value}}]],\"tags\":{{tags}]}]}",
          "placeholders": [
            { "name": "metric_name", "type": "String", "description": "Metric name.", "required": true },
            { "name": "type", "type": "String", "description": "Metric type: gauge, count, rate.", "required": false },
            { "name": "timestamp", "type": "Integer", "description": "POSIX timestamp in seconds.", "required": true },
            { "name": "value", "type": "Float", "description": "Metric value.", "required": true },
            { "name": "tags", "type": "String", "description": "JSON array of tag strings.", "required": false }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": { "value": "/{{metric_name}}", "placeholders": [{ "name": "metric_name", "type": "String", "description": "The metric name to delete.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "metric_alert", "path": "/webhooks/datadog/metrics/alert",
        "payload": [
          { "name": "metric", "type": "String", "selector": ["metric"], "meta": { "description": "The metric name." } },
          { "name": "value", "type": "Float", "selector": ["value"], "meta": { "description": "The value of the metric at the time of the alert." } },
          { "name": "timestamp", "type": "Integer", "selector": ["timestamp"], "meta": { "description": "POSIX timestamp when the metric alert occurred." } },
          { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags associated with the metric." } }
        ]
      }
    ]
  },
  {
    "handle": "events",
    "meta": {
      "short": "Events",
      "description": "Post and retrieve events in the event stream."
    },
    "endpoint": {
      "value": "/api/v1/events"
    },
    "fields": [
      { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Unique event ID." } },
      { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "Title of the event." } },
      { "name": "text", "type": "String", "selector": ["text"], "meta": { "description": "Body/content of the event." } },
      { "name": "date_happened", "type": "Integer", "selector": ["date_happened"], "meta": { "description": "POSIX timestamp when the event occurred." } },
      { "name": "priority", "type": "String", "selector": ["priority"], "meta": { "description": "Event priority: normal or low." } },
      { "name": "alert_type", "type": "String", "selector": ["alert_type"], "meta": { "description": "Alert type: error, warning, info, or success." } },
      { "name": "host", "type": "String", "selector": ["host"], "meta": { "description": "Host name associated with the event." } },
      { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags associated with the event." } },
      { "name": "url", "type": "String", "selector": ["url"], "meta": { "description": "URL of the event in the Datadog UI." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "" },
        "queryParams": {
          "start": { "value": "{{start}}", "placeholders": [{ "name": "start", "type": "Integer", "description": "Start of the query window (POSIX timestamp).", "required": true }] },
          "end": { "value": "{{end}}", "placeholders": [{ "name": "end", "type": "Integer", "description": "End of the query window (POSIX timestamp).", "required": true }] },
          "priority": { "value": "{{priority}}", "placeholders": [{ "name": "priority", "type": "String", "description": "Filter by priority (normal or low).", "required": false }] }
        }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{event_id}}", "placeholders": [{ "name": "event_id", "type": "Integer", "description": "The event ID.", "required": true }] }
      },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"title\":\"{{title}}\",\"text\":\"{{text}}\",\"date_happened\":{{date_happened}},\"priority\":\"{{priority}}\",\"alert_type\":\"{{alert_type}}\",\"host\":\"{{host}}\",\"tags\":{{tags}}}",
          "placeholders": [
            { "name": "title", "type": "String", "description": "Event title.", "required": true },
            { "name": "text", "type": "String", "description": "Event body.", "required": true },
            { "name": "date_happened", "type": "Integer", "description": "POSIX timestamp of the event.", "required": false },
            { "name": "priority", "type": "String", "description": "Priority: normal or low.", "required": false, "options": ["normal", "low"] },
            { "name": "alert_type", "type": "String", "description": "Alert type: error, warning, info, success.", "required": false, "options": ["error", "warning", "info", "success"] },
            { "name": "host", "type": "String", "description": "Host name.", "required": false },
            { "name": "tags", "type": "String", "description": "JSON array of tag strings.", "required": false }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "event_created", "path": "/webhooks/datadog/events/created",
        "payload": [
          { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Unique event ID." } },
          { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "Title of the event." } },
          { "name": "text", "type": "String", "selector": ["text"], "meta": { "description": "Body/content of the event." } },
          { "name": "date_happened", "type": "Integer", "selector": ["date_happened"], "meta": { "description": "POSIX timestamp when the event occurred." } },
          { "name": "priority", "type": "String", "selector": ["priority"], "meta": { "description": "Event priority: normal or low." } },
          { "name": "alert_type", "type": "String", "selector": ["alert_type"], "meta": { "description": "Alert type: error, warning, info, or success." } },
          { "name": "host", "type": "String", "selector": ["host"], "meta": { "description": "Host name associated with the event." } },
          { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags associated with the event." } },
          { "name": "url", "type": "String", "selector": ["url"], "meta": { "description": "URL of the event in the Datadog UI." } }
        ]
      }
    ]
  },
  {
    "handle": "monitors",
    "meta": {
      "short": "Monitors",
      "description": "Create and manage metric, log, and APM monitors with alerting."
    },
    "endpoint": {
      "value": "/api/v1/monitor"
    },
    "fields": [
      { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Monitor ID." } },
      { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Name of the monitor." } },
      { "name": "type", "type": "String", "selector": ["type"], "meta": { "description": "Monitor type (e.g., metric alert, service check, log alert)." } },
      { "name": "query", "type": "String", "selector": ["query"], "meta": { "description": "The monitor query." } },
      { "name": "message", "type": "String", "selector": ["message"], "meta": { "description": "Notification message for the monitor." } },
      { "name": "status", "type": "String", "selector": ["overall_state"], "meta": { "description": "Current monitor state: Alert, Warn, No Data, OK." } },
      { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags applied to the monitor." } },
      { "name": "created", "type": "String", "selector": ["created"], "meta": { "description": "Timestamp when the monitor was created." } },
      { "name": "modified", "type": "String", "selector": ["modified"], "meta": { "description": "Timestamp when the monitor was last modified." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "s" },
        "queryParams": {
          "tags": { "value": "{{tags}}", "placeholders": [{ "name": "tags", "type": "String", "description": "Filter by comma-separated tag list.", "required": false }] },
          "name": { "value": "{{name}}", "placeholders": [{ "name": "name", "type": "String", "description": "Filter monitors by name.", "required": false }] }
        }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{monitor_id}}", "placeholders": [{ "name": "monitor_id", "type": "Integer", "description": "The monitor ID.", "required": true }] }
      },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"name\":\"{{name}}\",\"type\":\"{{type}}\",\"query\":\"{{query}}\",\"message\":\"{{message}}\",\"tags\":{{tags}}}",
          "placeholders": [
            { "name": "name", "type": "String", "description": "Monitor name.", "required": true },
            { "name": "type", "type": "String", "description": "Monitor type (e.g., metric alert).", "required": true },
            { "name": "query", "type": "String", "description": "Alert query.", "required": true },
            { "name": "message", "type": "String", "description": "Notification message.", "required": false },
            { "name": "tags", "type": "String", "description": "JSON array of tag strings.", "required": false }
          ]
        }
      },
      "update": {
        "method": "PUT",
        "path": { "value": "/{{monitor_id}}", "placeholders": [{ "name": "monitor_id", "type": "Integer", "description": "The monitor ID.", "required": true }] },
        "bodyTemplate": {
          "value": "{\"name\":\"{{name}}\",\"query\":\"{{query}}\",\"message\":\"{{message}}\"}",
          "placeholders": [
            { "name": "name", "type": "String", "description": "Monitor name.", "required": false },
            { "name": "query", "type": "String", "description": "Alert query.", "required": false },
            { "name": "message", "type": "String", "description": "Notification message.", "required": false }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": { "value": "/{{monitor_id}}", "placeholders": [{ "name": "monitor_id", "type": "Integer", "description": "The monitor ID.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "monitor_alert", "path": "/webhooks/datadog/monitors/alert",
        "payload": [
          { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Monitor ID." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Name of the monitor." } },
          { "name": "status", "type": "String", "selector": ["overall_state"], "meta": { "description": "Current monitor state: Alert, Warn, No Data, OK." } },
          { "name": "alert_title", "type": "String", "selector": ["alert_title"], "meta": { "description": "Title of the alert." } },
          { "name": "alert_message", "type": "String", "selector": ["alert_message"], "meta": { "description": "Notification message." } },
          { "name": "link", "type": "String", "selector": ["link"], "meta": { "description": "Link to the monitor in Datadog." } },
          { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags applied to the monitor." } }
        ]
      },
      {
        "event": "monitor_recovery", "path": "/webhooks/datadog/monitors/recovery",
        "payload": [
          { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Monitor ID." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Name of the monitor." } },
          { "name": "status", "type": "String", "selector": ["overall_state"], "meta": { "description": "Monitor state transitioned to OK." } }
        ]
      }
    ]
  },
  {
    "handle": "dashboards",
    "meta": {
      "short": "Dashboards",
      "description": "Create, update, and retrieve visualization dashboards."
    },
    "endpoint": {
      "value": "/api/v1/dashboard"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Dashboard ID." } },
      { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "Dashboard title." } },
      { "name": "description", "type": "String", "selector": ["description"], "meta": { "description": "Dashboard description." } },
      { "name": "layout_type", "type": "String", "selector": ["layout_type"], "meta": { "description": "Layout type: ordered or free." } },
      { "name": "url", "type": "String", "selector": ["url"], "meta": { "description": "Dashboard URL in the Datadog UI." } },
      { "name": "author_handle", "type": "String", "selector": ["author_handle"], "meta": { "description": "Handle of the dashboard author." } },
      { "name": "created_at", "type": "String", "selector": ["created_at"], "meta": { "description": "Timestamp when the dashboard was created." } },
      { "name": "modified_at", "type": "String", "selector": ["modified_at"], "meta": { "description": "Timestamp when the dashboard was last modified." } },
      { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags applied to the dashboard." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "s" }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{dashboard_id}}", "placeholders": [{ "name": "dashboard_id", "type": "String", "description": "The dashboard ID.", "required": true }] }
      },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"title\":\"{{title}}\",\"layout_type\":\"{{layout_type}}\",\"description\":\"{{description}}\",\"widgets\":{{widgets}}}",
          "placeholders": [
            { "name": "title", "type": "String", "description": "Dashboard title.", "required": true },
            { "name": "layout_type", "type": "String", "description": "Layout type: ordered or free.", "required": true, "options": ["ordered", "free"] },
            { "name": "description", "type": "String", "description": "Dashboard description.", "required": false },
            { "name": "widgets", "type": "String", "description": "JSON array of widget definitions.", "required": true }
          ]
        }
      },
      "update": {
        "method": "PUT",
        "path": { "value": "/{{dashboard_id}}", "placeholders": [{ "name": "dashboard_id", "type": "String", "description": "The dashboard ID.", "required": true }] },
        "bodyTemplate": {
          "value": "{\"title\":\"{{title}}\",\"layout_type\":\"{{layout_type}}\",\"description\":\"{{description}}\",\"widgets\":{{widgets}}}",
          "placeholders": [
            { "name": "title", "type": "String", "description": "Dashboard title.", "required": false },
            { "name": "layout_type", "type": "String", "description": "Layout type: ordered or free.", "required": false },
            { "name": "description", "type": "String", "description": "Dashboard description.", "required": false },
            { "name": "widgets", "type": "String", "description": "JSON array of widget definitions.", "required": false }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": { "value": "/{{dashboard_id}}", "placeholders": [{ "name": "dashboard_id", "type": "String", "description": "The dashboard ID.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "dashboard_created", "path": "/webhooks/datadog/dashboards/created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Dashboard ID." } },
          { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "Dashboard title." } },
          { "name": "description", "type": "String", "selector": ["description"], "meta": { "description": "Dashboard description." } },
          { "name": "author_handle", "type": "String", "selector": ["author_handle"], "meta": { "description": "Handle of the dashboard author." } },
          { "name": "url", "type": "String", "selector": ["url"], "meta": { "description": "Dashboard URL in the Datadog UI." } }
        ]
      },
      {
        "event": "dashboard_updated", "path": "/webhooks/datadog/dashboards/updated",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Dashboard ID." } },
          { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "Dashboard title." } },
          { "name": "author_handle", "type": "String", "selector": ["author_handle"], "meta": { "description": "Handle of the user who modified the dashboard." } }
        ]
      }
    ]
  },
  {
    "handle": "downtimes",
    "meta": {
      "short": "Downtimes",
      "description": "Schedule downtimes to mute monitors and suppress alerts."
    },
    "endpoint": {
      "value": "/api/v1/downtime"
    },
    "fields": [
      { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Downtime ID." } },
      { "name": "scope", "type": "String", "multivalue": true, "selector": ["scope"], "meta": { "description": "Scope of the downtime (e.g., host:myhost, env:prod)." } },
      { "name": "monitor_id", "type": "Integer", "selector": ["monitor_id"], "meta": { "description": "ID of the monitor to mute (null mutes all)." } },
      { "name": "start", "type": "Integer", "selector": ["start"], "meta": { "description": "POSIX timestamp for the start of the downtime." } },
      { "name": "end", "type": "Integer", "selector": ["end"], "meta": { "description": "POSIX timestamp for the end of the downtime (null = indefinite)." } },
      { "name": "message", "type": "String", "selector": ["message"], "meta": { "description": "Message associated with the downtime." } },
      { "name": "active", "type": "Boolean", "selector": ["active"], "meta": { "description": "Whether the downtime is currently active." } },
      { "name": "canceled", "type": "Integer", "selector": ["canceled"], "meta": { "description": "POSIX timestamp when the downtime was canceled." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "s" },
        "queryParams": {
          "current_only": { "value": "{{current_only}}", "placeholders": [{ "name": "current_only", "type": "Boolean", "description": "Return only currently active downtimes.", "required": false }] }
        }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{downtime_id}}", "placeholders": [{ "name": "downtime_id", "type": "Integer", "description": "The downtime ID.", "required": true }] }
      },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"scope\":[\"{{scope}}\"],\"start\":{{start}},\"end\":{{end}},\"message\":\"{{message}}\",\"monitor_id\":{{monitor_id}}}",
          "placeholders": [
            { "name": "scope", "type": "String", "description": "Scope tag (e.g., host:web-01).", "required": true },
            { "name": "start", "type": "Integer", "description": "Start timestamp (POSIX).", "required": true },
            { "name": "end", "type": "Integer", "description": "End timestamp (POSIX). Omit for indefinite.", "required": false },
            { "name": "message", "type": "String", "description": "Reason for the downtime.", "required": false },
            { "name": "monitor_id", "type": "Integer", "description": "Monitor to mute (omit for all monitors).", "required": false }
          ]
        }
      },
      "update": {
        "method": "PUT",
        "path": { "value": "/{{downtime_id}}", "placeholders": [{ "name": "downtime_id", "type": "Integer", "description": "The downtime ID.", "required": true }] },
        "bodyTemplate": {
          "value": "{\"scope\":[\"{{scope}}\"],\"end\":{{end}},\"message\":\"{{message}}\"}",
          "placeholders": [
            { "name": "scope", "type": "String", "description": "Updated scope tag.", "required": false },
            { "name": "end", "type": "Integer", "description": "New end timestamp (POSIX).", "required": false },
            { "name": "message", "type": "String", "description": "Updated message.", "required": false }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": { "value": "/{{downtime_id}}", "placeholders": [{ "name": "downtime_id", "type": "Integer", "description": "The downtime ID.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "downtime_started", "path": "/webhooks/datadog/downtimes/started",
        "payload": [
          { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Downtime ID." } },
          { "name": "scope", "type": "String", "multivalue": true, "selector": ["scope"], "meta": { "description": "Scope of the downtime." } },
          { "name": "message", "type": "String", "selector": ["message"], "meta": { "description": "Downtime message." } }
        ]
      },
      {
        "event": "downtime_ended", "path": "/webhooks/datadog/downtimes/ended",
        "payload": [
          { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Downtime ID." } }
        ]
      }
    ]
  },
  {
    "handle": "hosts",
    "meta": {
      "short": "Hosts",
      "description": "Search and manage infrastructure hosts reporting to Datadog."
    },
    "endpoint": {
      "value": "/api/v1/hosts"
    },
    "fields": [
      { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Host ID." } },
      { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Host name." } },
      { "name": "aliases", "type": "String", "multivalue": true, "selector": ["aliases"], "meta": { "description": "Aliases for the host." } },
      { "name": "apps", "type": "String", "multivalue": true, "selector": ["apps"], "meta": { "description": "Integrations/apps running on the host." } },
      { "name": "tags_by_source", "type": "String", "selector": ["tags_by_source"], "meta": { "description": "Tags grouped by source." } },
      { "name": "up", "type": "Boolean", "selector": ["up"], "meta": { "description": "Whether the host is up." } },
      { "name": "last_reported_time", "type": "Integer", "selector": ["last_reported_time"], "meta": { "description": "POSIX timestamp of the last metric report." } },
      { "name": "is_muted", "type": "Boolean", "selector": ["is_muted"], "meta": { "description": "Whether the host is muted." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "" },
        "queryParams": {
          "filter": { "value": "{{filter}}", "placeholders": [{ "name": "filter", "type": "String", "description": "Filter by host name, tag, or alias substring.", "required": false }] },
          "count": { "value": "{{count}}", "placeholders": [{ "name": "count", "type": "Integer", "description": "Number of results per page.", "required": false }] },
          "start": { "value": "{{start}}", "placeholders": [{ "name": "start", "type": "Integer", "description": "Offset for pagination.", "required": false }] }
        }
      }
    },
    "webhooks": [
      {
        "event": "host_status_changed", "path": "/webhooks/datadog/hosts/status",
        "payload": [
          { "name": "id", "type": "Integer", "selector": ["id"], "meta": { "description": "Host ID." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Host name." } },
          { "name": "up", "type": "Boolean", "selector": ["up"], "meta": { "description": "Whether the host is up." } }
        ]
      }
    ]
  },
  {
    "handle": "service_checks",
    "meta": {
      "short": "Service Checks",
      "description": "Submit service check statuses for use in monitors."
    },
    "endpoint": {
      "value": "/api/v1/check_run"
    },
    "fields": [
      { "name": "check", "type": "String", "selector": ["check"], "meta": { "description": "Service check name." } },
      { "name": "host_name", "type": "String", "selector": ["host_name"], "meta": { "description": "Host name associated with the check." } },
      { "name": "status", "type": "Integer", "selector": ["status"], "meta": { "description": "Check status: 0=OK, 1=Warning, 2=Critical, 3=Unknown." } },
      { "name": "message", "type": "String", "selector": ["message"], "meta": { "description": "Optional message for the check." } },
      { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags associated with the check." } },
      { "name": "timestamp", "type": "Integer", "selector": ["timestamp"], "meta": { "description": "POSIX timestamp of the check." } }
    ],
    "operations": {
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "[{\"check\":\"{{check}}\",\"host_name\":\"{{host_name}}\",\"status\":{{status}},\"message\":\"{{message}}\",\"tags\":{{tags}},\"timestamp\":{{timestamp}}}]",
          "placeholders": [
            { "name": "check", "type": "String", "description": "Service check name.", "required": true },
            { "name": "host_name", "type": "String", "description": "Host name.", "required": true },
            { "name": "status", "type": "Integer", "description": "Status: 0=OK, 1=Warning, 2=Critical, 3=Unknown.", "required": true },
            { "name": "message", "type": "String", "description": "Status message.", "required": false },
            { "name": "tags", "type": "String", "description": "JSON array of tag strings.", "required": false },
            { "name": "timestamp", "type": "Integer", "description": "POSIX timestamp.", "required": false }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "service_check_alert", "path": "/webhooks/datadog/service_checks/alert",
        "payload": [
          { "name": "check", "type": "String", "selector": ["check"], "meta": { "description": "Service check name." } },
          { "name": "host_name", "type": "String", "selector": ["host_name"], "meta": { "description": "Host name." } },
          { "name": "status", "type": "Integer", "selector": ["status"], "meta": { "description": "Check status: 0=OK, 1=Warning, 2=Critical, 3=Unknown." } }
        ]
      }
    ]
  },
  {
    "handle": "logs",
    "meta": {
      "short": "Logs",
      "description": "Send and search log events."
    },
    "endpoint": {
      "value": "/api/v2/logs"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Log entry ID." } },
      { "name": "message", "type": "String", "selector": ["attributes", "message"], "meta": { "description": "Log message." } },
      { "name": "service", "type": "String", "selector": ["attributes", "service"], "meta": { "description": "Service that generated the log." } },
      { "name": "status", "type": "String", "selector": ["attributes", "status"], "meta": { "description": "Log status/severity (e.g., info, warn, error)." } },
      { "name": "host", "type": "String", "selector": ["attributes", "host"], "meta": { "description": "Host associated with the log." } },
      { "name": "timestamp", "type": "String", "selector": ["attributes", "timestamp"], "meta": { "description": "Timestamp of the log entry." } },
      { "name": "tags", "type": "String", "multivalue": true, "selector": ["attributes", "tags"], "meta": { "description": "Tags on the log entry." } }
    ],
    "operations": {
      "list": {
        "method": "POST",
        "path": { "value": "/events/search" },
        "bodyTemplate": {
          "value": "{\"filter\":{\"query\":\"{{query}}\",\"from\":\"{{from}}\",\"to\":\"{{to}}\"},\"page\":{\"limit\":{{limit}}}}",
          "placeholders": [
            { "name": "query", "type": "String", "description": "Log search query.", "required": false },
            { "name": "from", "type": "String", "description": "Start time (ISO 8601 or relative).", "required": true },
            { "name": "to", "type": "String", "description": "End time (ISO 8601 or relative).", "required": true },
            { "name": "limit", "type": "Integer", "description": "Max results per page.", "required": false }
          ]
        }
      },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "[{\"message\":\"{{message}}\",\"service\":\"{{service}}\",\"ddtags\":\"{{tags}}\",\"hostname\":\"{{host}}\"}]",
          "placeholders": [
            { "name": "message", "type": "String", "description": "Log message.", "required": true },
            { "name": "service", "type": "String", "description": "Service name.", "required": false },
            { "name": "tags", "type": "String", "description": "Comma-separated tags.", "required": false },
            { "name": "host", "type": "String", "description": "Host name.", "required": false }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "log_alert", "path": "/webhooks/datadog/logs/alert",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "Log entry ID." } },
          { "name": "message", "type": "String", "selector": ["attributes", "message"], "meta": { "description": "Log message." } },
          { "name": "status", "type": "String", "selector": ["attributes", "status"], "meta": { "description": "Log status/severity." } }
        ]
      }
    ]
  },
  {
    "handle": "synthetics",
    "meta": {
      "short": "Synthetics",
      "description": "Manage synthetic API and browser tests."
    },
    "endpoint": {
      "value": "/api/v1/synthetics/tests"
    },
    "fields": [
      { "name": "public_id", "type": "String", "selector": ["public_id"], "meta": { "description": "Public ID of the synthetic test." } },
      { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Test name." } },
      { "name": "type", "type": "String", "selector": ["type"], "meta": { "description": "Test type: api or browser." } },
      { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Test status: live or paused." } },
      { "name": "monitor_id", "type": "Integer", "selector": ["monitor_id"], "meta": { "description": "Associated monitor ID." } },
      { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags applied to the test." } },
      { "name": "locations", "type": "String", "multivalue": true, "selector": ["locations"], "meta": { "description": "Test locations." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "" }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{public_id}}", "placeholders": [{ "name": "public_id", "type": "String", "description": "The test public ID.", "required": true }] }
      },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"name\":\"{{name}}\",\"type\":\"{{type}}\",\"config\":{{config}},\"locations\":{{locations}},\"options\":{{options}}}",
          "placeholders": [
            { "name": "name", "type": "String", "description": "Test name.", "required": true },
            { "name": "type", "type": "String", "description": "Test type: api or browser.", "required": true, "options": ["api", "browser"] },
            { "name": "config", "type": "String", "description": "JSON object with test config (request, assertions).", "required": true },
            { "name": "locations", "type": "String", "description": "JSON array of location identifiers.", "required": true },
            { "name": "options", "type": "String", "description": "JSON object with test options (tick_every, min_failure_duration).", "required": false }
          ]
        }
      },
      "delete": {
        "method": "POST",
        "path": { "value": "/delete" },
        "bodyTemplate": {
          "value": "{\"public_ids\":[\"{{public_id}}\"]}",
          "placeholders": [{ "name": "public_id", "type": "String", "description": "Public ID of the test to delete.", "required": true }]
        }
      }
    },
    "webhooks": [
      {
        "event": "synthetic_test_result", "path": "/webhooks/datadog/synthetics/result",
        "payload": [
          { "name": "public_id", "type": "String", "selector": ["public_id"], "meta": { "description": "Public ID of the synthetic test." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "Test name." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Result status: passed or failed." } }
        ]
      }
    ]
  },
  {
    "handle": "slos",
    "meta": {
      "short": "SLOs",
      "description": "Create and manage Service Level Objectives (SLOs)."
    },
    "endpoint": {
      "value": "/api/v1/slo"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "SLO ID." } },
      { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "SLO name." } },
      { "name": "type", "type": "String", "selector": ["type"], "meta": { "description": "SLO type: metric or monitor." } },
      { "name": "description", "type": "String", "selector": ["description"], "meta": { "description": "SLO description." } },
      { "name": "target", "type": "Float", "selector": ["thresholds", "0", "target"], "meta": { "description": "Target SLO percentage (e.g., 99.9)." } },
      { "name": "timeframe", "type": "String", "selector": ["thresholds", "0", "timeframe"], "meta": { "description": "SLO timeframe: 7d, 30d, or 90d." } },
      { "name": "tags", "type": "String", "multivalue": true, "selector": ["tags"], "meta": { "description": "Tags applied to the SLO." } },
      { "name": "created_at", "type": "Integer", "selector": ["created_at"], "meta": { "description": "POSIX timestamp when the SLO was created." } },
      { "name": "modified_at", "type": "Integer", "selector": ["modified_at"], "meta": { "description": "POSIX timestamp when the SLO was last modified." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "s" },
        "queryParams": {
          "tags_query": { "value": "{{tags_query}}", "placeholders": [{ "name": "tags_query", "type": "String", "description": "Filter SLOs by tags.", "required": false }] }
        }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{slo_id}}", "placeholders": [{ "name": "slo_id", "type": "String", "description": "The SLO ID.", "required": true }] }
      },
      "create": {
        "method": "POST",
        "path": { "value": "s" },
        "bodyTemplate": {
          "value": "{\"name\":\"{{name}}\",\"type\":\"{{type}}\",\"description\":\"{{description}}\",\"thresholds\":[{\"target\":{{target}},\"timeframe\":\"{{timeframe}}\"}],\"tags\":{{tags}}}",
          "placeholders": [
            { "name": "name", "type": "String", "description": "SLO name.", "required": true },
            { "name": "type", "type": "String", "description": "SLO type: metric or monitor.", "required": true, "options": ["metric", "monitor"] },
            { "name": "description", "type": "String", "description": "SLO description.", "required": false },
            { "name": "target", "type": "Float", "description": "Target percentage (e.g., 99.9).", "required": true },
            { "name": "timeframe", "type": "String", "description": "Timeframe: 7d, 30d, or 90d.", "required": true, "options": ["7d", "30d", "90d"] },
            { "name": "tags", "type": "String", "description": "JSON array of tag strings.", "required": false }
          ]
        }
      },
      "update": {
        "method": "PUT",
        "path": { "value": "/{{slo_id}}", "placeholders": [{ "name": "slo_id", "type": "String", "description": "The SLO ID.", "required": true }] },
        "bodyTemplate": {
          "value": "{\"name\":\"{{name}}\",\"description\":\"{{description}}\",\"thresholds\":[{\"target\":{{target}},\"timeframe\":\"{{timeframe}}\"}]}",
          "placeholders": [
            { "name": "name", "type": "String", "description": "SLO name.", "required": false },
            { "name": "description", "type": "String", "description": "SLO description.", "required": false },
            { "name": "target", "type": "Float", "description": "Target percentage.", "required": false },
            { "name": "timeframe", "type": "String", "description": "Timeframe: 7d, 30d, or 90d.", "required": false }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": { "value": "/{{slo_id}}", "placeholders": [{ "name": "slo_id", "type": "String", "description": "The SLO ID.", "required": true }] }
      }
    },
    "webhooks": [
      {
        "event": "slo_alert", "path": "/webhooks/datadog/slos/alert",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "SLO ID." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "SLO name." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "SLO status/alerting state." } }
        ]
      }
    ]
  },
  {
    "handle": "users",
    "meta": {
      "short": "Users",
      "description": "Manage Datadog user accounts within an organization."
    },
    "endpoint": {
      "value": "/api/v2/users"
    },
    "fields": [
      { "name": "id", "type": "String", "selector": ["data", "id"], "meta": { "description": "User ID (UUID)." } },
      { "name": "name", "type": "String", "selector": ["data", "attributes", "name"], "meta": { "description": "User full name." } },
      { "name": "email", "type": "String", "selector": ["data", "attributes", "email"], "meta": { "description": "User email address." } },
      { "name": "handle", "type": "String", "selector": ["data", "attributes", "handle"], "meta": { "description": "User handle (usually email)." } },
      { "name": "status", "type": "String", "selector": ["data", "attributes", "status"], "meta": { "description": "User status: Active, Disabled, or Pending." } },
      { "name": "verified", "type": "Boolean", "selector": ["data", "attributes", "verified"], "meta": { "description": "Whether the user's email is verified." } },
      { "name": "created_at", "type": "String", "selector": ["data", "attributes", "created_at"], "meta": { "description": "Timestamp when the user was created." } }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": { "value": "" },
        "queryParams": {
          "filter": { "value": "{{filter}}", "placeholders": [{ "name": "filter", "type": "String", "description": "Filter users by email or name.", "required": false }] },
          "page[size]": { "value": "{{page_size}}", "placeholders": [{ "name": "page_size", "type": "Integer", "description": "Number of results per page.", "required": false }] }
        }
      },
      "read": {
        "method": "GET",
        "path": { "value": "/{{user_id}}", "placeholders": [{ "name": "user_id", "type": "String", "description": "The user ID (UUID).", "required": true }] }
      },
      "create": {
        "method": "POST",
        "path": { "value": "" },
        "bodyTemplate": {
          "value": "{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"{{name}}\",\"email\":\"{{email}}\"}}}",
          "placeholders": [
            { "name": "name", "type": "String", "description": "User full name.", "required": true },
            { "name": "email", "type": "String", "description": "User email address.", "required": true }
          ]
        }
      },
      "update": {
        "method": "PATCH",
        "path": { "value": "/{{user_id}}", "placeholders": [{ "name": "user_id", "type": "String", "description": "The user ID (UUID).", "required": true }] },
        "bodyTemplate": {
          "value": "{\"data\":{\"type\":\"users\",\"id\":\"{{user_id}}\",\"attributes\":{\"name\":\"{{name}}\",\"disabled\":{{disabled}}}}}",
          "placeholders": [
            { "name": "user_id", "type": "String", "description": "The user ID (UUID).", "required": true },
            { "name": "name", "type": "String", "description": "Updated user name.", "required": false },
            { "name": "disabled", "type": "Boolean", "description": "Whether to disable the user.", "required": false }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "user_created", "path": "/webhooks/datadog/users/created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["data", "id"], "meta": { "description": "User ID (UUID)." } },
          { "name": "name", "type": "String", "selector": ["data", "attributes", "name"], "meta": { "description": "User full name." } },
          { "name": "email", "type": "String", "selector": ["data", "attributes", "email"], "meta": { "description": "User email address." } }
        ]
      }
    ]
  },
  {
    "handle": "organizations",
    "meta": {
      "short": "Organizations",
      "description": "Retrieve information about the Datadog organization."
    },
    "endpoint": {
      "value": "/api/v1/org"
    },
    "fields": [
      { "name": "public_id", "type": "String", "selector": ["org", "public_id"], "meta": { "description": "Organization public ID." } },
      { "name": "name", "type": "String", "selector": ["org", "name"], "meta": { "description": "Organization name." } },
      { "name": "description", "type": "String", "selector": ["org", "description"], "meta": { "description": "Organization description." } },
      { "name": "created", "type": "String", "selector": ["org", "created"], "meta": { "description": "Timestamp when the organization was created." } },
      { "name": "trial", "type": "Boolean", "selector": ["org", "trial"], "meta": { "description": "Whether the organization is on a trial." } }
    ],
    "operations": {
      "read": {
        "method": "GET",
        "path": { "value": "" }
      }
    },
    "webhooks": [
      {
        "event": "organization_updated", "path": "/webhooks/datadog/organizations/updated",
        "payload": [
          { "name": "public_id", "type": "String", "selector": ["org", "public_id"], "meta": { "description": "Organization public ID." } },
          { "name": "name", "type": "String", "selector": ["org", "name"], "meta": { "description": "Organization name." } }
        ]
      }
    ]
  }
]

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: New Metric Post

Datadog Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/vZ8ipwxyr9F6k6pQq8ry" alt="" width="250"><figcaption></figcaption></figure>

<p align="center">The New Metric Post action submits a custom metric data point to the monitoring platform.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to post a new metric to Datadog so that I can monitor system performance in real-time.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| apiKey      | String     | Yes      |
| appKey      | String     | Yes      |
| metricName  | String     | Yes      |
| metricValue | Float      | Yes      |
| timestamp   | Integer    | No       |
| tags        | String     | No       |

### Related Connections

[Datadog](/human-connections/datadog/datadog)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "new-metric-post",
  "state": "inDev",
  "meta": {
    "short": "Post New Metric",
    "description": "Posts a new metric to Datadog"
  },
  "input": [
    {
      "name": "apiKey",
      "type": "String",
      "required": true,
      "meta": {
        "description": "Datadog API key"
      }
    },
    {
      "name": "appKey",
      "type": "String",
      "required": true,
      "meta": {
        "description": "Datadog application key"
      }
    },
    {
      "name": "metricName",
      "type": "String",
      "required": true,
      "meta": {
        "description": "Name of the metric"
      }
    },
    {
      "name": "metricValue",
      "type": "Float",
      "required": true,
      "meta": {
        "description": "Value of the metric"
      }
    },
    {
      "name": "timestamp",
      "type": "Integer",
      "required": false,
      "meta": {
        "description": "POSIX timestamp of the metric"
      }
    },
    {
      "name": "tags",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Comma-separated list of tags"
      }
    }
  ],
  "output": [
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "Status of the request"
      }
    },
    {
      "name": "response",
      "type": "String",
      "selector": ["body"],
      "meta": {
        "description": "Response body"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/api/v1/series",
        "headers": {
          "Content-Type": "application/json",
          "DD-API-KEY": "{{apiKey}}",
          "DD-APPLICATION-KEY": "{{appKey}}"
        },
        "bodyTemplate": {
          "value": "{\"series\":[{\"metric\":\"{{metricName}}\",\"points\":[[{{timestamp | default: \"now\" | date: \"%s\"}},{{metricValue}}]],\"tags\":[{{tags | split: \",\" | to_json}}]}]}",
          "placeholders": [
            {
              "name": "metricName",
              "type": "String",
              "description": "Name of the metric",
              "required": true
            },
            {
              "name": "metricValue",
              "type": "Float",
              "description": "Value of the metric",
              "required": true
            },
            {
              "name": "timestamp",
              "type": "Integer",
              "description": "POSIX timestamp of the metric",
              "required": false
            },
            {
              "name": "tags",
              "type": "String",
              "description": "Comma-separated list of tags",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: API Request

Datadog Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/vZ8ipwxyr9F6k6pQq8ry" alt="" width="250"><figcaption></figcaption></figure>

<p align="center">The API Request action sends a custom API request to the Datadog platform.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to send an API request to Datadog to retrieve monitoring metrics so that I can analyze system performance.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| endpoint   | String     | Yes      |
| method     | String     | Yes      |
| body       | String     | No       |
| headers    | String     | No       |

### Related Connections

[Datadog](/human-connections/datadog/datadog)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "api-request",
  "state": "inDev",
  "meta": {
    "short": "API Request",
    "description": "Send an API request to Datadog"
  },
  "input": [
    {
      "name": "endpoint",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The Datadog API endpoint to call"
      }
    },
    {
      "name": "method",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The HTTP method to use (GET, POST, PUT, PATCH, DELETE)"
      }
    },
    {
      "name": "body",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The request body as a JSON string"
      }
    },
    {
      "name": "headers",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Additional headers as a JSON string"
      }
    }
  ],
  "output": [
    {
      "name": "response",
      "type": "String",
      "selector": ["body"],
      "meta": {
        "description": "The response body from the API request"
      }
    },
    {
      "name": "statusCode",
      "type": "Integer",
      "selector": ["status"],
      "meta": {
        "description": "The HTTP status code from the API request"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "{{method}}",
        "path": "{{endpoint}}",
        "headers": {
          "Content-Type": "application/json",
          "{{headers}}": "{{headers}}"
        },
        "bodyTemplate": {
          "value": "{{body}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Discord

Discord Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/2iT5E4NjemnjxJIzrSJC" alt="" width="375"><figcaption></figcaption></figure>

<h3 align="center">Put Discord to Work with @Human Automations and @Human Agents</h3>

<p align="center">The Discord Connection documents all Triggers, Actions and Query Operations available for creating automations via the Discord API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the Discord Connection?

* Connect to the Discord API in a few clicks
* Use the related Discord Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Server Updated**

Triggers on: servers/server\_updated

Triggered when a server's settings, including name or icon, are updated.

**Member Joined**

Triggers on: servers/member\_added

Triggered when a new member joins a server.

**Member Left**

Triggers on: servers/member\_removed

Triggered when a member leaves a server or is removed.

**Channel Created**

Triggers on: channels/channel\_created

Triggered when a new channel is created within a server.

**Channel Deleted**

Triggers on: channels/channel\_deleted

Triggered when an existing channel is deleted.

**Message Created**

Triggers on: messages/message\_created

Triggered when a new message is sent in a channel.

**Message Updated**

Triggers on: messages/message\_updated

Triggered when an existing message is edited.

**Message Deleted**

Triggers on: messages/message\_deleted

Triggered when a message is deleted from a channel.

#### Action Operations

[Action: Add Role](/human-connections/discord/discord/action-add-role)

[Action: Remove User Role](/human-connections/discord/discord/action-remove-user-role)

[Action: Send Channel Message](/human-connections/discord/discord/action-send-channel-message)

[Action: Send message in Forum Post](/human-connections/discord/discord/action-send-message-in-forum-post)

#### Query Operations

Example link

### Related Automations

Example link

### Obtaining Access Credentials

1. **Log in** to the [Discord Developer Portal](https://discord.com/developers/applications) and select your application.
2. **Navigate to the "Bot"** page in the left sidebar.
3. **Reset and Copy your Bot Token** by clicking the **"Reset Token"** button (this is your permanent access credential).
4. **Ensure "Public Bot" is disabled** if you only want this bot for your own server.
5. **Add the Bot to your server** via the **OAuth2 URL Generator** with the required scopes (e.g., `bot`, `applications.commands`).

### Configuring Webhooks

1. **Log in** to your [Discord Developer Portal](https://discord.com/developers/applications) and select your application.
2. **Navigate to "Settings" → "Webhook Events"** in the left sidebar.
3. **Enter the Webhook URL** provided by your integration into the **Endpoint** field.
4. **Enable Events** by clicking the toggle in the Events section.
5. **Select the specific events** you wish to receive (e.g., `APPLICATION_AUTHORIZED`, `ENTITLEMENT_CREATE`) and click **Save Changes**.
6. **Navigate to the "General Information"** page and enter the same URL into the **Interactions Endpoint URL** field to receive slash commands and component interactions.
7. **Navigate to the "Bot" page** settings in the left sidebar.
8. **Enable Privileged Gateway Intents** by toggling **"Server Members Intent"** and **"Message Content Intent"** to ensure all server-level events are captured.
9. **Click "Save Changes"** to activate the configuration.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "discord",
  "status": "active",
  "meta": {
    "short": "Discord",
    "description": "Connect to Discord's API for managing servers, channels, and messages.",
    "icon": "discord",
    "tags": ["communication", "messaging", "api"]
  },
  "service": {
    "baseURL": {
      "value": "https://discord.com/api/v10"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "Authorization": {
        "value": "Bot {{token}}"
      },
      "User-Agent": {
        "value": "DiscordBot (https://example.com, v1.0)"
      }
    },
    "auth": {
      "method": "api_token",
      "params": {
        "apiToken": {
          "token": {
            "value": "{{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          },
          "headerName": {
            "value": "Authorization"
          }
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```
[
  {
    "handle": "servers",
    "meta": {
      "short": "Servers",
      "description": "Manage Discord servers (guilds) including creation, updates, and deletions."
    },
    "endpoint": {
      "value": "/guilds",
      "placeholders": []
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": ["id"],
        "meta": {
          "description": "The unique identifier for the server."
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": ["name"],
        "meta": {
          "description": "The name of the server."
        }
      },
      {
        "name": "icon",
        "type": "String",
        "selector": ["icon"],
        "meta": {
          "description": "The icon hash of the server."
        }
      },
      {
        "name": "owner_id",
        "type": "String",
        "selector": ["owner_id"],
        "meta": {
          "description": "The ID of the server owner."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      },
      "create": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\", \"region\": \"{{region}}\"}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "Name of the server",
              "required": true
            },
            {
              "name": "region",
              "type": "String",
              "description": "Region of the server",
              "required": true
            }
          ]
        }
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Server ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      },
      "update": {
        "method": "PATCH",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Server ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\"}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "New name of the server",
              "required": false
            }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Server ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": [
      {
        "event": "server_updated",
        "path": "/webhooks/discord/server_updated",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the server." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "The name of the server." } },
          { "name": "description", "type": "String", "selector": ["description"], "meta": { "description": "The description of the server." } },
          { "name": "owner_id", "type": "String", "selector": ["owner_id"], "meta": { "description": "The ID of the server owner." } }
        ]
      },
      {
        "event": "member_added",
        "path": "/webhooks/discord/member_added",
        "payload": [
          { "name": "guild_id", "type": "String", "selector": ["guild_id"], "meta": { "description": "The ID of the server." } },
          { "name": "user_id", "type": "String", "selector": ["user", "id"], "meta": { "description": "The ID of the member." } },
          { "name": "username", "type": "String", "selector": ["user", "username"], "meta": { "description": "The username of the member." } },
          { "name": "joined_at", "type": "String", "selector": ["joined_at"], "meta": { "description": "The timestamp when the member joined." } }
        ]
      },
      {
        "event": "member_removed",
        "path": "/webhooks/discord/member_removed",
        "payload": [
          { "name": "guild_id", "type": "String", "selector": ["guild_id"], "meta": { "description": "The ID of the server." } },
          { "name": "user_id", "type": "String", "selector": ["user", "id"], "meta": { "description": "The ID of the member." } },
          { "name": "username", "type": "String", "selector": ["user", "username"], "meta": { "description": "The username of the member." } }
        ]
      }
    ]
  },
  {
    "handle": "channels",
    "meta": {
      "short": "Channels",
      "description": "Manage Discord channels within servers, including text and voice channels."
    },
    "endpoint": {
      "value": "/guilds/{{guild_id}}/channels",
      "placeholders": [
        {
          "name": "guild_id",
          "type": "String",
          "description": "ID of the server",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": ["id"],
        "meta": {
          "description": "The unique identifier for the channel."
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": ["name"],
        "meta": {
          "description": "The name of the channel."
        }
      },
      {
        "name": "type",
        "type": "Integer",
        "selector": ["type"],
        "meta": {
          "description": "The type of channel (e.g., 0 for text, 2 for voice)."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      },
      "create": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\", \"type\": {{type}}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "Name of the channel",
              "required": true
            },
            {
              "name": "type",
              "type": "Integer",
              "description": "Type of channel (0 for text, 2 for voice)",
              "required": true
            }
          ]
        }
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Channel ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      },
      "update": {
        "method": "PATCH",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Channel ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\"}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "New name of the channel",
              "required": false
            }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Channel ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": [
      {
        "event": "channel_created",
        "path": "/webhooks/discord/channel_created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the channel." } },
          { "name": "guild_id", "type": "String", "selector": ["guild_id"], "meta": { "description": "The ID of the server." } },
          { "name": "name", "type": "String", "selector": ["name"], "meta": { "description": "The name of the channel." } },
          { "name": "type", "type": "Integer", "selector": ["type"], "meta": { "description": "The type of channel." } }
        ]
      },
      {
        "event": "channel_deleted",
        "path": "/webhooks/discord/channel_deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the deleted channel." } },
          { "name": "guild_id", "type": "String", "selector": ["guild_id"], "meta": { "description": "The ID of the server." } }
        ]
      }
    ]
  },
  {
    "handle": "messages",
    "meta": {
      "short": "Messages",
      "description": "Manage messages within Discord channels, including sending, editing, and deleting messages."
    },
    "endpoint": {
      "value": "/channels/{{channel_id}}/messages",
      "placeholders": [
        {
          "name": "channel_id",
          "type": "String",
          "description": "ID of the channel",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": ["id"],
        "meta": {
          "description": "The unique identifier for the message."
        }
      },
      {
        "name": "content",
        "type": "String",
        "selector": ["content"],
        "meta": {
          "description": "The content of the message."
        }
      },
      {
        "name": "author_id",
        "type": "String",
        "selector": ["author", "id"],
        "meta": {
          "description": "The unique ID of the message author."
        }
      },
      {
        "name": "author_username",
        "type": "String",
        "selector": ["author", "username"],
        "meta": {
          "description": "The username of the message author."
        }
      },
      {
        "name": "author_global_name",
        "type": "String",
        "selector": ["author", "global_name"],
        "meta": {
          "description": "The display name of the message author."
        }
      },
      {
        "name": "author_bot",
        "type": "Boolean",
        "selector": ["author", "bot"],
        "meta": {
          "description": "Whether the message author is a bot."
        }
      },
      {
        "name": "timestamp",
        "type": "String",
        "selector": ["timestamp"],
        "meta": {
          "description": "The timestamp of the message."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      },
      "create": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"content\": \"{{content}}\"}",
          "placeholders": [
            {
              "name": "content",
              "type": "String",
              "description": "Content of the message",
              "required": true
            }
          ]
        }
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Message ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      },
      "update": {
        "method": "PATCH",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Message ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          },
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"content\": \"{{content}}\"}",
          "placeholders": [
            {
              "name": "content",
              "type": "String",
              "description": "New content of the message",
              "required": false
            }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/{{id}}",
          "placeholders": [
            {
              "name": "id",
              "type": "String",
              "description": "Message ID",
              "required": true
            }
          ]
        },
        "headers": {
          "Authorization": {
            "value": "Bot {{token}}",
            "placeholders": [
              {
                "name": "token",
                "type": "String",
                "description": "Discord bot token",
                "required": true
              }
            ]
          }
        },
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": [
      {
        "event": "message_created",
        "path": "/webhooks/discord/message_created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the message." } },
          { "name": "channel_id", "type": "String", "selector": ["channel_id"], "meta": { "description": "The ID of the channel." } },
          { "name": "guild_id", "type": "String", "selector": ["guild_id"], "meta": { "description": "The ID of the server." } },
          { "name": "content", "type": "String", "selector": ["content"], "meta": { "description": "The content of the message." } },
          { "name": "author_id", "type": "String", "selector": ["author", "id"], "meta": { "description": "The unique ID of the message author." } },
          { "name": "author_username", "type": "String", "selector": ["author", "username"], "meta": { "description": "The username of the message author." } }
        ]
      },
      {
        "event": "message_updated",
        "path": "/webhooks/discord/message_updated",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the message." } },
          { "name": "channel_id", "type": "String", "selector": ["channel_id"], "meta": { "description": "The ID of the channel." } },
          { "name": "content", "type": "String", "selector": ["content"], "meta": { "description": "The new content of the message." } }
        ]
      },
      {
        "event": "message_deleted",
        "path": "/webhooks/discord/message_deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the deleted message." } },
          { "name": "channel_id", "type": "String", "selector": ["channel_id"], "meta": { "description": "The ID of the channel." } }
        ]
      }
    ]
  }
]

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Add Role

Discord Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/2iT5E4NjemnjxJIzrSJC" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Add Role action in Discord assigns a specific role (and its permissions) to a user on a server.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to give new team members access to our project channels, so I use the Add Role action in Discord to assign them the "Project Contributor" role.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| guildId    | String     | Yes      |
| userId     | String     | Yes      |
| roleId     | String     | Yes      |

### Related Connections

[Discord](/human-connections/discord/discord)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "add-role",
  "state": "inDev",
  "meta": {
    "short": "Add Role",
    "description": "Adds a specified role to a user in a Discord server."
  },
  "input": [
    {
      "name": "guildId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the Discord server (guild)."
      }
    },
    {
      "name": "userId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the user to whom the role will be added."
      }
    },
    {
      "name": "roleId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the role to be added."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": [],
      "meta": {
        "description": "Indicates whether the role was successfully added."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "PUT",
        "path": "/guilds/{{guildId}}/members/{{userId}}/roles/{{roleId}}",
        "headers": {
          "Content-Type": "application/json"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Remove User Role

Discord Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/2iT5E4NjemnjxJIzrSJC" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Remove User Role action in Discord revokes a specific role (and its permissions) from a user on a server.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to restrict a member’s access to admin channels after their project ends, so I use the Remove User Role action in Discord to take away their "Project Lead" role.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| guildID    | String     | Yes      |
| userID     | String     | Yes      |
| roleID     | String     | Yes      |
| botToken   | String     | Yes      |

### Related Connections

[Discord](/human-connections/discord/discord)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "remove-user-role",
  "state": "inDev",
  "meta": {
    "short": "Remove User Role",
    "description": "Removes a specified role from a user in a Discord server."
  },
  "input": [
    {
      "name": "guildID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the Discord server (guild)."
      }
    },
    {
      "name": "userID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the user to remove the role from."
      }
    },
    {
      "name": "roleID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the role to remove from the user."
      }
    },
    {
      "name": "botToken",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The bot token for authenticating with the Discord API."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": [],
      "meta": {
        "description": "Indicates whether the role was successfully removed."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "DELETE",
        "path": "/guilds/{{guildID}}/members/{{userID}}/roles/{{roleID}}",
        "headers": {
          "Content-Type": "application/json"
        }
      }
    }
  ]
}
```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Send Channel Message

Discord Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/2iT5E4NjemnjxJIzrSJC" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Send Channel Message action in Discord posts a message to a specified channel on a server.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to notify everyone about the upcoming team meeting, so I use the Send Channel Message action in Discord to post a reminder in the #announcements channel.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| channelID  | String     | Yes      |
| message    | String     | Yes      |
| embed      | Object     | No       |

### Related Connections

[Discord](/human-connections/discord/discord)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "send-channel-message",
  "state": "inDev",
  "meta": {
    "short": "Send Channel Message",
    "description": "Sends a message to a specified Discord channel."
  },
  "input": [
    {
      "name": "channelID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the Discord channel to send the message to."
      }
    },
    {
      "name": "message",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The content of the message to send."
      }
    },
    {
      "name": "embed",
      "type": "Object",
      "required": false,
      "meta": {
        "description": "An optional embed object to include in the message."
      }
    }
  ],
  "output": [
    {
      "name": "messageID",
      "type": "String",
      "selector": ["id"],
      "meta": {
        "description": "The ID of the sent message."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/channels/{{channelID}}/messages",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"content\": \"{{message}}\", \"embed\": {{embed}}}",
          "placeholders": [
            {
              "name": "message",
              "type": "String",
              "description": "The content of the message to send.",
              "required": true
            },
            {
              "name": "embed",
              "type": "Object",
              "description": "An optional embed object to include in the message.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Send message in Forum Post

Discord Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/2iT5E4NjemnjxJIzrSJC" alt="" width="375"><figcaption></figcaption></figure>

<p align="center">The Send Message in Forum Post action in Discord allows you to reply or post a message within a specific forum thread.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to answer a team member’s question about the project timeline, so I use the Send Message in Forum Post action in Discord to reply directly in the relevant forum thread.

#### Fields

| Field Name     | Field Type | Required |
| -------------- | ---------- | -------- |
| channelID      | String     | Yes      |
| threadID       | String     | Yes      |
| messageContent | String     | Yes      |
| messageID      | String     | No       |

### Related Connections

[Discord](/human-connections/discord/discord)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "send-forum-post-message",
  "state": "inDev",
  "meta": {
    "short": "Send Message in Forum Post",
    "description": "Send a message to a specific forum post in Discord."
  },
  "input": [
    {
      "name": "channelID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the forum channel."
      }
    },
    {
      "name": "threadID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the thread (forum post) where the message will be sent."
      }
    },
    {
      "name": "messageContent",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The content of the message to be sent."
      }
    }
  ],
  "output": [
    {
      "name": "messageID",
      "type": "String",
      "selector": ["id"],
      "meta": {
        "description": "The ID of the sent message."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/channels/{{channelID}}/messages",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"content\": \"{{messageContent}}\", \"message_reference\": {\"channel_id\": \"{{channelID}}\", \"message_id\": \"{{threadID}}\"}}",
          "placeholders": [
            {
              "name": "channelID",
              "type": "String",
              "description": "The ID of the forum channel.",
              "required": true
            },
            {
              "name": "threadID",
              "type": "String",
              "description": "The ID of the thread (forum post).",
              "required": true
            },
            {
              "name": "messageContent",
              "type": "String",
              "description": "The content of the message to be sent.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Docusign

Docusign Connection

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<h3 align="center">Put Docusign to Work with @Human Automations and @Human Agents</h3>

<p align="center">The Docusign Connection documents all Triggers, Actions and Query Operations available for creating automations via the Docusign API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the Docusign Connection?

* Connect to the Docusign API in a few clicks
* Use the related Docusign Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Envelope Sent**

Triggers on: envelopes/envelopeSent

Triggered when an envelope is successfully sent.

**Envelope Completed**

Triggers on: envelopes/envelopeCompleted

Triggered when an envelope is completely signed and ready.

#### Action Operations

[Action: Add Document to Workspace](/human-connections/docusign/docusign/action-add-document-to-workspace)

[Action: Add User to Workspace](/human-connections/docusign/docusign/action-add-user-to-workspace)

[Action: Create Bulk Send List](/human-connections/docusign/docusign/action-create-bulk-send-list)

[Action: Create Envelope From Workspace](/human-connections/docusign/docusign/action-create-envelope-from-workspace)

[Action: Create Workspace](/human-connections/docusign/docusign/action-create-workspace)

[Action: Download Envelope Document](/human-connections/docusign/docusign/action-download-envelope-document)

[Action: Send Envelope Using Template](/human-connections/docusign/docusign/action-send-envelope-using-template)

[Action: Cancel Maestro Workflow Instance](/human-connections/docusign/docusign/action-cancel-maestro-workflow-instance)

[Action: Resume Maestro Workflow Instance](/human-connections/docusign/docusign/action-resume-maestro-workflow-instance)

[Action: Create Pre-Filled Webform Link](/human-connections/docusign/docusign/action-create-pre-filled-webform-link)

[Action: Revoke Workspace User Access](/human-connections/docusign/docusign/action-revoke-workspace-user-access)

[Action: Test Bulk Send Request](/human-connections/docusign/docusign/action-test-bulk-send-request)

[Action: Update Workspace User](/human-connections/docusign/docusign/action-update-workspace-user)

[Action: API Request](/human-connections/docusign/docusign/action-api-request)

[Action: Add to Bulk Send List](/human-connections/docusign/docusign/action-add-to-bulk-send-list)

[Action: Bulk Send Envelope From Template](/human-connections/docusign/docusign/action-bulk-send-envelope-from-template)

[Action: Create Draft Signature Request](/human-connections/docusign/docusign/action-create-draft-signature-request)

[Action: Create Template from Document](/human-connections/docusign/docusign/action-create-template-from-document)

[Action: Delete Document From Workspace](/human-connections/docusign/docusign/action-delete-document-from-workspace)

[Action: Send Envelope Using Document](/human-connections/docusign/docusign/action-send-envelope-using-document)

[Action: Pause Maestro Workflow Instance](/human-connections/docusign/docusign/action-pause-maestro-workflow-instance)

[Action: Trigger Maestro Workflow](/human-connections/docusign/docusign/action-trigger-maestro-workflow)

[Action: Restore Workspace User Access](/human-connections/docusign/docusign/action-restore-workspace-user-access)

[Action: Create Signature Request](/human-connections/docusign/docusign/action-create-signature-request)

[Action: Update Template](/human-connections/docusign/docusign/action-update-template)

[Action: Void Envelope](/human-connections/docusign/docusign/action-void-envelope)

[Action: Create Envelope with Base URL and Account ID Input](/human-connections/docusign/docusign/action-create-envelope-with-base-url-and-account-id-input)

#### Query Operations

[Query: Find Documents List for Envelope](/human-connections/docusign/docusign/query-find-documents-list-for-envelope)

[Query: Find Envelope Info](/human-connections/docusign/docusign/query-find-envelope-info)

[Query: Find Maestro Workflow](/human-connections/docusign/docusign/query-find-maestro-workflow)

[Query: Find Maestro Workflow Instance](/human-connections/docusign/docusign/query-find-maestro-workflow-instance)

[Query: Find Template](/human-connections/docusign/docusign/query-find-template)

[Query: Find Workspaces](/human-connections/docusign/docusign/query-find-workspaces)

[Query: List Envelopes in Workspace](/human-connections/docusign/docusign/query-list-envelopes-in-workspace)

[Query: Find Custom Fields for Envelope](/human-connections/docusign/docusign/query-find-custom-fields-for-envelope)

[Query: Find Form Data for Envelope](/human-connections/docusign/docusign/query-find-form-data-for-envelope)

[Query: Find Recipients for Envelope](/human-connections/docusign/docusign/query-find-recipients-for-envelope)

[Query: Find Navigator Agreement](/human-connections/docusign/docusign/query-find-navigator-agreement)

[Query: Find Envelope Documents](/human-connections/docusign/docusign/query-find-envelope-documents)

[Query: Find Template Documents](/human-connections/docusign/docusign/query-find-template-documents)

[Query: Find Documents in Workspace](/human-connections/docusign/docusign/query-find-documents-in-workspace)

[Query: List Users in Workspace](/human-connections/docusign/docusign/query-list-users-in-workspace)

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **DocuSign Personal Access Token (PAT)** for system-to-system access, follow these steps:

#### **Prerequisites**

1. A **DocuSign Developer Account** (free at [developers.docusign.com](https://developers.docusign.com/)).
2. An **Integration Key (Client ID)** from a **DocuSign App** (created in the Developer Portal).

#### **Steps to Generate a PAT**

1. **Log in** to the [DocuSign Developer Portal](https://admindemo.docusign.com/).
2. Navigate to **"My Apps"** (under **"Apps and Keys"** in the left sidebar).
3. Select your **App** (or create one if needed).
4. Under **"Authentication"**, locate the **"Generate RSA Key Pair"** section.
5. Click **"Generate Key Pair"** (this creates a private/public key pair).
6. Download the **private key** (`.pem` file) and store it securely.
7. Under **"Personal Access Tokens"**, click **"Add Personal Access Token"**.
8. Provide a **name** and **scope** (e.g., `signature`).
9. Click **"Generate Token"**.
10. Copy the **generated PAT** (it will only be shown once).

#### **Required Values**

* **Integration Key (Client ID)** – From your DocuSign App.
* **User ID (GUID)** – Your DocuSign account GUID (found in **API Account Info**).
* **Private Key (RSA .pem file)** – Downloaded in Step 6.
* **Personal Access Token (PAT)** – Generated in Step 10.

Use these values for API authentication.

### Configuring Webhooks

1. **Log in** to your DocuSign account.
2. Navigate to the **Admin** tab.
3. In the left sidebar, under **Integrations**, select **Connect**.
4. Click **Add Configuration** and select **Custom**.
5. Provide a descriptive **Name** for the configuration.
6. Enter the **URL to Publish** (your webhook listener endpoint).
7. Select the **Data Format** (JSON is recommended).
8. Under **Event Triggers**, select the specific events you want to track (e.g., **Envelope Signed**).
9. Click **Add** to save the configuration.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "docusign-v2",
  "status": "active",
  "meta": {
    "short": "DocuSign",
    "description": "Connect to DocuSign for electronic signatures and agreement workflows.",
    "icon": "docusign",
    "tags": ["e-signature", "documents", "agreements"]
  },
  "service": {
    "baseURL": {
      "value": "https://{{environment}}.docusign.net/restapi"
    },
    "protocol": "https",
    "contentType": "application/json",
    "headers": {
      "Accept": {
        "value": "application/json"
      }
    },
    "auth": {
      "method": "system_to_system",
      "params": {}
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```
[
  {
    "handle": "envelopes",
    "meta": {
      "short": "Envelopes",
      "description": "Manage and track envelopes for sending and signing documents."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/envelopes",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "envelopeId",
        "type": "String",
        "selector": ["envelopeId"],
        "meta": {
          "description": "Unique identifier for the envelope"
        }
      },
      {
        "name": "status",
        "type": "String",
        "selector": ["status"],
        "meta": {
          "description": "Current status of the envelope (e.g., 'sent', 'delivered', 'completed')"
        }
      },
      {
        "name": "emailSubject",
        "type": "String",
        "selector": ["emailSubject"],
        "meta": {
          "description": "Subject line of the email sent to recipients"
        }
      },
      {
        "name": "createdDateTime",
        "type": "String",
        "selector": ["createdDateTime"],
        "meta": {
          "description": "Timestamp when the envelope was created"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {},
        "queryParams": {
          "from_date": {
            "value": "{{fromDate}}",
            "placeholders": [
              {
                "name": "fromDate",
                "type": "String",
                "description": "Filter envelopes created after this date",
                "required": false
              }
            ]
          }
        }
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{envelopeId}}",
          "placeholders": [
            {
              "name": "envelopeId",
              "type": "String",
              "description": "The ID of the envelope to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      },
      "create": {
        "method": "POST",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {
          "Content-Type": {
            "value": "application/json",
            "placeholders": []
          }
        },
        "bodyTemplate": {
          "value": "{\"status\": \"{{status}}\", \"emailSubject\": \"{{emailSubject}}\", \"documents\": {{documents}}, \"recipients\": {\"signers\": {{signers}}}}",
          "placeholders": [
            {
              "name": "status",
              "type": "String",
              "description": "Status of the envelope (e.g., 'sent')",
              "required": true
            },
            {
              "name": "emailSubject",
              "type": "String",
              "description": "Subject line of the email",
              "required": true
            },
            {
              "name": "documents",
              "type": "Array",
              "description": "List of documents in the envelope",
              "required": true
            },
            {
              "name": "signers",
              "type": "Array",
              "description": "List of signers for the envelope",
              "required": true
            }
          ]
        }
      }
    },
    "webhooks": [
      {
        "event": "envelopeSent",
        "path": "/webhooks/docusign/envelope-sent",
        "payload": [
          {
            "name": "envelopeId",
            "type": "String",
            "selector": ["envelopeId"],
            "meta": {
              "description": "ID of the envelope that was sent"
            }
          },
          {
            "name": "status",
            "type": "String",
            "selector": ["status"],
            "meta": {
              "description": "Status of the envelope"
            }
          }
        ]
      },
      {
        "event": "envelopeCompleted",
        "path": "/webhooks/docusign/envelope-completed",
        "payload": [
          {
            "name": "envelopeId",
            "type": "String",
            "selector": ["envelopeId"],
            "meta": {
              "description": "ID of the envelope that was completed"
            }
          },
          {
            "name": "status",
            "type": "String",
            "selector": ["status"],
            "meta": {
              "description": "Status of the envelope"
            }
          }
        ]
      }
    ]
  },
  {
    "handle": "templates",
    "meta": {
      "short": "Templates",
      "description": "Manage and use templates for creating envelopes."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/templates",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "templateId",
        "type": "String",
        "selector": ["templateId"],
        "meta": {
          "description": "Unique identifier for the template"
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": ["name"],
        "meta": {
          "description": "Name of the template"
        }
      },
      {
        "name": "createdDateTime",
        "type": "String",
        "selector": ["createdDateTime"],
        "meta": {
          "description": "Timestamp when the template was created"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{templateId}}",
          "placeholders": [
            {
              "name": "templateId",
              "type": "String",
              "description": "The ID of the template to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "recipients",
    "meta": {
      "short": "Recipients",
      "description": "Manage recipients of envelopes, including signers and carbon copy recipients."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/envelopes/{{envelopeId}}/recipients",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        },
        {
          "name": "envelopeId",
          "type": "String",
          "description": "The ID of the envelope",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "recipientId",
        "type": "String",
        "selector": ["recipientId"],
        "meta": {
          "description": "Unique identifier for the recipient"
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": ["name"],
        "meta": {
          "description": "Name of the recipient"
        }
      },
      {
        "name": "email",
        "type": "String",
        "selector": ["email"],
        "meta": {
          "description": "Email address of the recipient"
        }
      },
      {
        "name": "status",
        "type": "String",
        "selector": ["status"],
        "meta": {
          "description": "Current status of the recipient (e.g., 'sent', 'delivered', 'completed')"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{recipientId}}",
          "placeholders": [
            {
              "name": "recipientId",
              "type": "String",
              "description": "The ID of the recipient to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "users",
    "meta": {
      "short": "Users",
      "description": "Manage users within a DocuSign account."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/users",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "userId",
        "type": "String",
        "selector": ["userId"],
        "meta": {
          "description": "Unique identifier for the user"
        }
      },
      {
        "name": "userName",
        "type": "String",
        "selector": ["userName"],
        "meta": {
          "description": "Name of the user"
        }
      },
      {
        "name": "email",
        "type": "String",
        "selector": ["email"],
        "meta": {
          "description": "Email address of the user"
        }
      },
      {
        "name": "userStatus",
        "type": "String",
        "selector": ["userStatus"],
        "meta": {
          "description": "Status of the user (e.g., 'active', 'closed')"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{userId}}",
          "placeholders": [
            {
              "name": "userId",
              "type": "String",
              "description": "The ID of the user to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "groups",
    "meta": {
      "short": "Groups",
      "description": "Manage user groups within a DocuSign account."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/groups",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "groupId",
        "type": "String",
        "selector": ["groupId"],
        "meta": {
          "description": "Unique identifier for the group"
        }
      },
      {
        "name": "groupName",
        "type": "String",
        "selector": ["groupName"],
        "meta": {
          "description": "Name of the group"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{groupId}}",
          "placeholders": [
            {
              "name": "groupId",
              "type": "String",
              "description": "The ID of the group to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "folders",
    "meta": {
      "short": "Folders",
      "description": "Manage folders for organizing envelopes."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/folders",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "folderId",
        "type": "String",
        "selector": ["folderId"],
        "meta": {
          "description": "Unique identifier for the folder"
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": ["name"],
        "meta": {
          "description": "Name of the folder"
        }
      },
      {
        "name": "type",
        "type": "String",
        "selector": ["type"],
        "meta": {
          "description": "Type of folder (e.g., 'draft', 'inbox', 'normal')"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{folderId}}",
          "placeholders": [
            {
              "name": "folderId",
              "type": "String",
              "description": "The ID of the folder to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "workspaces",
    "meta": {
      "short": "Workspaces",
      "description": "Manage workspaces for collaboration."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/workspaces",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "workspaceId",
        "type": "String",
        "selector": ["workspaceId"],
        "meta": {
          "description": "Unique identifier for the workspace"
        }
      },
      {
        "name": "workspaceName",
        "type": "String",
        "selector": ["workspaceName"],
        "meta": {
          "description": "Name of the workspace"
        }
      },
      {
        "name": "status",
        "type": "String",
        "selector": ["status"],
        "meta": {
          "description": "Status of the workspace"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{workspaceId}}",
          "placeholders": [
            {
              "name": "workspaceId",
              "type": "String",
              "description": "The ID of the workspace to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "brands",
    "meta": {
      "short": "Brands",
      "description": "Manage account brands for styling envelopes and emails."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/brands",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "brandId",
        "type": "String",
        "selector": ["brandId"],
        "meta": {
          "description": "Unique identifier for the brand"
        }
      },
      {
        "name": "brandName",
        "type": "String",
        "selector": ["brandName"],
        "meta": {
          "description": "Name of the brand"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{brandId}}",
          "placeholders": [
            {
              "name": "brandId",
              "type": "String",
              "description": "The ID of the brand to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "envelope_documents",
    "meta": {
      "short": "Envelope Documents",
      "description": "Manage documents within a specific envelope."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/envelopes/{{envelopeId}}/documents",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        },
        {
          "name": "envelopeId",
          "type": "String",
          "description": "The ID of the envelope",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "documentId",
        "type": "String",
        "selector": ["documentId"],
        "meta": {
          "description": "Unique identifier for the document"
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": ["name"],
        "meta": {
          "description": "Name of the document"
        }
      },
      {
        "name": "type",
        "type": "String",
        "selector": ["type"],
        "meta": {
          "description": "File type or document type"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{documentId}}",
          "placeholders": [
            {
              "name": "documentId",
              "type": "String",
              "description": "The ID of the document to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "template_documents",
    "meta": {
      "short": "Template Documents",
      "description": "Manage documents within a specific template."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/templates/{{templateId}}/documents",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        },
        {
          "name": "templateId",
          "type": "String",
          "description": "The ID of the template",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "documentId",
        "type": "String",
        "selector": ["documentId"],
        "meta": {
          "description": "Unique identifier for the document"
        }
      },
      {
        "name": "name",
        "type": "String",
        "selector": ["name"],
        "meta": {
          "description": "Name of the document"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{documentId}}",
          "placeholders": [
            {
              "name": "documentId",
              "type": "String",
              "description": "The ID of the document to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  },
  {
    "handle": "signing_groups",
    "meta": {
      "short": "Signing Groups",
      "description": "Manage signing groups for routing envelopes to a team."
    },
    "endpoint": {
      "value": "/v2.1/accounts/{{accountId}}/signing_groups",
      "placeholders": [
        {
          "name": "accountId",
          "type": "String",
          "description": "The account ID in DocuSign",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "signingGroupId",
        "type": "String",
        "selector": ["signingGroupId"],
        "meta": {
          "description": "Unique identifier for the signing group"
        }
      },
      {
        "name": "groupName",
        "type": "String",
        "selector": ["groupName"],
        "meta": {
          "description": "Name of the signing group"
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": "",
          "placeholders": []
        },
        "headers": {}
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{signingGroupId}}",
          "placeholders": [
            {
              "name": "signingGroupId",
              "type": "String",
              "description": "The ID of the signing group to retrieve",
              "required": true
            }
          ]
        },
        "headers": {}
      }
    }
  }
]

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Add Document to Workspace

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Add Document to Workspace action uploads a file to a specified DocuSign workspace for storage or further processing.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to automatically add signed contracts to our team’s DocuSign workspace, so everyone can access and review them in one place.

#### Fields

| Field Name      | Field Type | Required |
| --------------- | ---------- | -------- |
| workspaceId     | String     | Yes      |
| documentName    | String     | Yes      |
| documentContent | String     | Yes      |
| accessToken     | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "add-document-to-workspace",
  "state": "inDev",
  "meta": {
    "short": "Add Document to Workspace",
    "description": "Uploads a document to a specified Docusign workspace."
  },
  "input": [
    {
      "name": "workspaceId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the workspace where the document will be added."
      }
    },
    {
      "name": "documentName",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the document to be uploaded."
      }
    },
    {
      "name": "documentContent",
      "type": "String",
      "required": true,
      "meta": {
        "description": "Base64 encoded content of the document."
      }
    }
  ],
  "output": [
    {
      "name": "documentId",
      "type": "String",
      "selector": ["documentId"],
      "meta": {
        "description": "The ID of the uploaded document."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/workspaces/{{workspaceId}}/folders",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"name\": \"{{documentName}}\", \"content\": \"{{documentContent}}\"}",
          "placeholders": [
            {
              "name": "workspaceId",
              "type": "String",
              "description": "The ID of the workspace where the document will be added.",
              "required": true
            },
            {
              "name": "documentName",
              "type": "String",
              "description": "The name of the document to be uploaded.",
              "required": true
            },
            {
              "name": "documentContent",
              "type": "String",
              "description": "Base64 encoded content of the document.",
              "required": true
            },
            {
              "name": "accessToken",
              "type": "String",
              "description": "Access token for Docusign API authentication.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}
```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Add User to Workspace

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Add User to Workspace action grants a new user access to a specific DocuSign workspace.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to add new team members to our DocuSign workspace automatically, so they can immediately access and collaborate on documents.

#### Fields

| Field Name          | Field Type | Required |
| ------------------- | ---------- | -------- |
| workspaceId         | String     | Yes      |
| userId              | String     | Yes      |
| permissionProfileId | String     | Yes      |
| accessToken         | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "add-user-to-workspace",
  "state": "inDev",
  "meta": {
    "short": "Add User to Workspace",
    "description": "Adds a user to a specified workspace in DocuSign."
  },
  "input": [
    {
      "name": "workspaceId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the workspace to which the user will be added."
      }
    },
    {
      "name": "userId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the user to be added to the workspace."
      }
    },
    {
      "name": "permissionProfileId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the permission profile to assign to the user."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the operation was successful."
      }
    },
    {
      "name": "workspaceUserId",
      "type": "String",
      "selector": ["workspaceUserId"],
      "meta": {
        "description": "The ID of the newly created workspace user association."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/workspaces/{{workspaceId}}/users",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"userId\": \"{{userId}}\", \"permissionProfileId\": \"{{permissionProfileId}}\"}",
          "placeholders": [
            {
              "name": "accessToken",
              "type": "String",
              "description": "The access token for authenticating with the DocuSign API.",
              "required": true
            },
            {
              "name": "workspaceId",
              "type": "String",
              "description": "The ID of the workspace to which the user will be added.",
              "required": true
            },
            {
              "name": "userId",
              "type": "String",
              "description": "The ID of the user to be added to the workspace.",
              "required": true
            },
            {
              "name": "permissionProfileId",
              "type": "String",
              "description": "The ID of the permission profile to assign to the user.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Bulk Send List

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Bulk Send List action prepares a list of recipients and documents for sending multiple envelopes in bulk.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a bulk send list in DocuSign for monthly invoices, so I can send personalized contracts to all clients at once.

#### Fields

| Field Name       | Field Type | Required |
| ---------------- | ---------- | -------- |
| accountId        | String     | Yes      |
| bulkSendListName | String     | Yes      |
| recipients       | Array      | Yes      |
| templateId       | String     | No       |
| bulkSendListId   | String     | -        |
| status           | String     | -        |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-bulk-send-list",
  "state": "inDev",
  "meta": {
    "short": "Create Bulk Send List",
    "description": "Creates a bulk send list in DocuSign for sending documents to multiple recipients."
  },
  "input": [
    {
      "name": "accountId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The DocuSign account ID."
      }
    },
    {
      "name": "bulkSendListName",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the bulk send list."
      }
    },
    {
      "name": "recipients",
      "type": "Array",
      "required": true,
      "meta": {
        "description": "List of recipient details (name, email, etc.)."
      }
    },
    {
      "name": "templateId",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The template ID to use for the bulk send."
      }
    }
  ],
  "output": [
    {
      "name": "bulkSendListId",
      "type": "String",
      "selector": ["bulkSendListId"],
      "meta": {
        "description": "The ID of the created bulk send list."
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the bulk send list creation."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/bulk_send_lists",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\n  \"bulkSendListName\": \"{{bulkSendListName}}\",\n  \"recipients\": {{recipients}},\n  \"templateId\": \"{{templateId}}\"\n}",
          "placeholders": [
            {
              "name": "bulkSendListName",
              "type": "String",
              "description": "Name of the bulk send list.",
              "required": true
            },
            {
              "name": "recipients",
              "type": "Array",
              "description": "List of recipient details.",
              "required": true
            },
            {
              "name": "templateId",
              "type": "String",
              "description": "Template ID for the bulk send.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Envelope From Workspace

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Envelope From Workspace action generates a new signing envelope using documents already stored in a DocuSign workspace.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a signing envelope from our DocuSign workspace templates, so I can quickly send contracts to new clients without re-uploading files.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| templateId | String     | Yes      |
| status     | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-envelope-from-workspace",
  "state": "inDev",
  "meta": {
    "short": "Create Envelope From Workspace",
    "description": "Creates an envelope from a template in a Docusign workspace."
  },
  "input": [
    {
      "name": "templateId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the template to use for the envelope."
      }
    },
    {
      "name": "status",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The status of the envelope. Default is 'sent'.",
        "default": "sent"
      }
    }
  ],
  "output": [
    {
      "name": "envelopeId",
      "type": "String",
      "selector": ["envelopeId"],
      "meta": {
        "description": "The ID of the created envelope."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/envelopes",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"status\":\"{{status}}\",\"templateId\":\"{{templateId}}\"}",
          "placeholders": [
            {
              "name": "status",
              "type": "String",
              "description": "The status of the envelope.",
              "required": false,
              "default": "sent"
            },
            {
              "name": "templateId",
              "type": "String",
              "description": "The ID of the template to use for the envelope.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Workspace

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Workspace action sets up a new shared folder in DocuSign for organizing and collaborating on documents.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a dedicated DocuSign workspace for each new project, so my team can securely store and manage all related contracts in one place.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| name        | String     | Yes      |
| description | String     | No       |
| billable    | Boolean    | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-workspace",
  "state": "inDev",
  "meta": {
    "short": "Create Workspace",
    "description": "Creates a new workspace in Docusign."
  },
  "input": [
    {
      "name": "name",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the workspace."
      }
    },
    {
      "name": "description",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The description of the workspace."
      }
    },
    {
      "name": "billable",
      "type": "Boolean",
      "required": false,
      "meta": {
        "description": "Whether the workspace is billable."
      }
    }
  ],
  "output": [
    {
      "name": "workspaceId",
      "type": "String",
      "selector": ["workspaceId"],
      "meta": {
        "description": "The ID of the created workspace."
      }
    },
    {
      "name": "name",
      "type": "String",
      "selector": ["name"],
      "meta": {
        "description": "The name of the created workspace."
      }
    },
    {
      "name": "description",
      "type": "String",
      "selector": ["description"],
      "meta": {
        "description": "The description of the created workspace."
      }
    },
    {
      "name": "billable",
      "type": "Boolean",
      "selector": ["billable"],
      "meta": {
        "description": "Whether the created workspace is billable."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/workspaces",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"name\": \"{{name}}\", \"description\": \"{{description}}\", \"billable\": {{billable}}}",
          "placeholders": [
            {
              "name": "name",
              "type": "String",
              "description": "The name of the workspace.",
              "required": true
            },
            {
              "name": "description",
              "type": "String",
              "description": "The description of the workspace.",
              "required": false
            },
            {
              "name": "billable",
              "type": "Boolean",
              "description": "Whether the workspace is billable.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Download Envelope Document

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Download Envelope Document action retrieves a completed or in-progress document from a DocuSign envelope for local storage or review.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to automatically download signed contracts from DocuSign envelopes, so I can archive them in our internal system for compliance.

#### Fields

| Field Name  | Field Type | Required         |
| ----------- | ---------- | ---------------- |
| envelopeId  | String     | Yes              |
| documentId  | String     | Yes              |
| accountId   | String     | Yes (in path)    |
| accessToken | String     | Yes (in headers) |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "download-envelope-document",
  "state": "inDev",
  "meta": {
    "short": "Download Envelope Document",
    "description": "Downloads a document from a Docusign envelope."
  },
  "input": [
    {
      "name": "envelopeId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the envelope containing the document."
      }
    },
    {
      "name": "documentId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the document to download."
      }
    }
  ],
  "output": [
    {
      "name": "document",
      "type": "Binary",
      "selector": ["body"],
      "meta": {
        "description": "The downloaded document in binary format."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": "/v2.1/accounts/{{accountId}}/envelopes/{{envelopeId}}/documents/{{documentId}}",
        "headers": {
          "Accept": "application/pdf"
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": ""
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Send Envelope Using Template

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Send Envelope Using Template action generates and sends a signing request using a pre-made DocuSign template.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to send onboarding agreements using our DocuSign template, so new hires can sign all required documents quickly and consistently.

#### Fields

| Field Name     | Field Type | Required |
| -------------- | ---------- | -------- |
| templateId     | String     | Yes      |
| recipientEmail | String     | Yes      |
| recipientName  | String     | Yes      |
| status         | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "send-envelope-using-template",
  "state": "inDev",
  "meta": {
    "short": "Send Envelope Using Template",
    "description": "Sends an envelope using a specified template in DocuSign."
  },
  "input": [
    {
      "name": "templateId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the template to use for the envelope."
      }
    },
    {
      "name": "recipientEmail",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The email address of the recipient."
      }
    },
    {
      "name": "recipientName",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the recipient."
      }
    },
    {
      "name": "status",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The status of the envelope (e.g., 'sent', 'created').",
        "default": "sent"
      }
    }
  ],
  "output": [
    {
      "name": "envelopeId",
      "type": "String",
      "selector": ["envelopeId"],
      "meta": {
        "description": "The ID of the created envelope."
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the envelope."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/envelopes",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"templateId\":\"{{templateId}}\",\"status\":\"{{status}}\",\"templateRoles\":[{\"email\":\"{{recipientEmail}}\",\"name\":\"{{recipientName}}\",\"roleName\":\"signer\"}]}",
          "placeholders": [
            {
              "name": "templateId",
              "type": "String",
              "description": "The ID of the template to use for the envelope.",
              "required": true
            },
            {
              "name": "status",
              "type": "String",
              "description": "The status of the envelope.",
              "required": false,
              "default": "sent"
            },
            {
              "name": "recipientEmail",
              "type": "String",
              "description": "The email address of the recipient.",
              "required": true
            },
            {
              "name": "recipientName",
              "type": "String",
              "description": "The name of the recipient.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Cancel Maestro Workflow Instance

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Cancel Maestro Workflow Instance action cancels an active Maestro workflow instance, stopping its execution.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to cancel a running Maestro workflow instance to halt an erroneous or outdated document process.

#### Fields

| Field Name         | Field Type | Required |
| ------------------ | ---------- | -------- |
| workflowInstanceId | String     | Yes      |
| accessToken        | String     | Yes      |
| status             | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "cancel-maestro-workflow-instance",
  "state": "inDev",
  "meta": {
    "short": "Cancel Maestro Workflow Instance",
    "description": "Cancels a running Maestro workflow instance in Docusign."
  },
  "input": [
    {
      "name": "workflowInstanceId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the workflow instance to cancel."
      }
    }
  ],
  "output": [
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the cancellation request."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/maestro/workflowInstances/{{workflowInstanceId}}/cancel",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{}",
          "placeholders": [
            {
              "name": "accessToken",
              "type": "String",
              "description": "The access token for authenticating with Docusign.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Resume Maestro Workflow Instance

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Resume Maestro Workflow Instance action restarts a paused Maestro workflow instance, allowing it to continue processing.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to resume a paused Maestro workflow instance so that delayed document processing can continue and agreements reach recipients on time.

#### Fields

| Field Name         | Field Type | Required |
| ------------------ | ---------- | -------- |
| workflowInstanceID | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "resume-maestro-workflow-instance",
  "state": "inDev",
  "meta": {
    "short": "Resume Maestro Workflow Instance",
    "description": "Resumes a paused workflow instance in Maestro."
  },
  "input": [
    {
      "name": "workflowInstanceID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the workflow instance to resume."
      }
    }
  ],
  "output": [
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the resumed workflow instance."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/workflow-instances/{{workflowInstanceID}}/resume",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Pre-Filled Webform Link

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Pre-Filled Webform Link action generates a shareable link to a Docusign form with pre-populated fields for faster recipient completion.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a pre-filled webform link so recipients can quickly sign agreements without manually entering repeated data like names or addresses.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| envelopeId  | String     | Yes      |
| recipientId | String     | Yes      |
| returnUrl   | String     | No       |
| url         | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-pre-filled-webform-link",
  "state": "inDev",
  "meta": {
    "short": "Create Pre-Filled Webform Link",
    "description": "Generates a pre-filled webform link for a DocuSign envelope."
  },
  "input": [
    {
      "name": "envelopeId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the envelope for which the webform link is generated."
      }
    },
    {
      "name": "recipientId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the recipient for the webform link."
      }
    },
    {
      "name": "returnUrl",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The URL to redirect to after the webform is completed."
      }
    }
  ],
  "output": [
    {
      "name": "url",
      "type": "String",
      "selector": ["url"],
      "meta": {
        "description": "The generated pre-filled webform link."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/envelopes/{{envelopeId}}/views/recipient",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"returnUrl\": \"{{returnUrl}}\", \"authenticationMethod\": \"none\", \"recipientId\": \"{{recipientId}}\", \"userName\": \"{{userName}}\", \"email\": \"{{email}}\"}",
          "placeholders": [
            {
              "name": "returnUrl",
              "type": "String",
              "description": "The URL to redirect to after the webform is completed.",
              "required": false
            },
            {
              "name": "recipientId",
              "type": "String",
              "description": "The ID of the recipient for the webform link.",
              "required": true
            },
            {
              "name": "userName",
              "type": "String",
              "description": "The name of the recipient.",
              "required": true
            },
            {
              "name": "email",
              "type": "String",
              "description": "The email of the recipient.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Revoke Workspace User Access

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Cancel Maestro Workflow Instance action stops an in-progress Maestro workflow, halting any further processing or notifications.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to revoke access for former team members from our DocuSign workspaces, so only current employees can view or edit sensitive documents.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| workspaceId | String     | Yes      |
| userId      | String     | Yes      |
| accessToken | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "revoke-workspace-user-access",
  "state": "inDev",
  "meta": {
    "short": "Revoke Workspace User Access",
    "description": "Revokes a user's access to a specific workspace in DocuSign."
  },
  "input": [
    {
      "name": "workspaceId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the workspace from which to revoke user access."
      }
    },
    {
      "name": "userId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the user whose access is to be revoked."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the operation was successful."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "DELETE",
        "path": "/v2.1/workspaces/{{workspaceId}}/users/{{userId}}",
        "headers": {
          "Content-Type": "application/json"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Test Bulk Send Request

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Test Bulk Send Request action validates a bulk send list and settings before actually sending envelopes, ensuring everything is configured correctly.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to test my bulk send request in DocuSign before sending, so I can confirm all recipient details and documents are correct.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| accountId  | String     | Yes      |
| templateId | String     | Yes      |
| recipients | Array      | Yes      |
| status     | String     | No       |
| bulkSendId | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "test-bulk-send-request",
  "state": "inDev",
  "meta": {
    "short": "Test Bulk Send Request",
    "description": "Send a bulk request to Docusign for testing purposes."
  },
  "input": [
    {
      "name": "accountId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The Docusign account ID."
      }
    },
    {
      "name": "templateId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The Docusign template ID to use for the bulk send."
      }
    },
    {
      "name": "recipients",
      "type": "Array",
      "required": true,
      "meta": {
        "description": "List of recipient details for the bulk send."
      }
    }
  ],
  "output": [
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the bulk send request."
      }
    },
    {
      "name": "bulkSendId",
      "type": "String",
      "selector": ["bulkSendId"],
      "meta": {
        "description": "The ID of the created bulk send request."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/bulk_send",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"templateId\": \"{{templateId}}\", \"recipients\": {{recipients}}}",
          "placeholders": [
            {
              "name": "templateId",
              "type": "String",
              "description": "The Docusign template ID.",
              "required": true
            },
            {
              "name": "recipients",
              "type": "Array",
              "description": "List of recipient details.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Update Workspace User

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Update Workspace User action modifies a user’s permissions or role within a specific DocuSign workspace.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to update a colleague’s permissions in our DocuSign workspace, so they can help manage and edit project documents as needed.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| accountId  | String     | Yes      |
| userId     | String     | Yes      |
| userData   | Object     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "update-workspace-user",
  "state": "inDev",
  "meta": {
    "short": "Update Workspace User",
    "description": "Updates an existing user in a Docusign workspace."
  },
  "input": [
    {
      "name": "accountId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The Docusign account ID."
      }
    },
    {
      "name": "userId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the user to update."
      }
    },
    {
      "name": "userData",
      "type": "Object",
      "required": true,
      "meta": {
        "description": "The updated user data."
      }
    }
  ],
  "output": [
    {
      "name": "updatedUser",
      "type": "Object",
      "selector": ["user"],
      "meta": {
        "description": "The updated user details."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "PUT",
        "path": "/v2.1/accounts/{{accountId}}/users/{{userId}}",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{{userData}}",
          "placeholders": [
            {
              "name": "userData",
              "type": "Object",
              "description": "The updated user data.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: API Request

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The API Request action allows you to send custom API calls to DocuSign’s platform for advanced or specialized operations.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to use a custom DocuSign API request to fetch real-time signing statuses, so I can track progress and send reminders automatically.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| method      | String     | Yes      |
| path        | String     | Yes      |
| headers     | Map        | No       |
| queryParams | Map        | No       |
| body        | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "api-request",
  "state": "inDev",
  "meta": {
    "short": "API Request",
    "description": "Send an API request to Docusign"
  },
  "input": [
    {
      "name": "method",
      "type": "String",
      "required": true,
      "meta": {
        "description": "HTTP method for the request"
      }
    },
    {
      "name": "path",
      "type": "String",
      "required": true,
      "meta": {
        "description": "API endpoint path"
      }
    },
    {
      "name": "headers",
      "type": "Map",
      "required": false,
      "meta": {
        "description": "HTTP headers for the request"
      }
    },
    {
      "name": "queryParams",
      "type": "Map",
      "required": false,
      "meta": {
        "description": "Query parameters for the request"
      }
    },
    {
      "name": "body",
      "type": "String",
      "required": false,
      "meta": {
        "description": "Request body"
      }
    }
  ],
  "output": [
    {
      "name": "response",
      "type": "String",
      "selector": ["body"],
      "meta": {
        "description": "Response from the API request"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "{{method}}",
        "path": "{{path}}",
        "headers": "{{headers}}",
        "queryParams": "{{queryParams}}",
        "bodyTemplate": {
          "value": "{{body}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Add to Bulk Send List

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Add to Bulk Send List action includes recipients and documents in a bulk send queue for mass distribution.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to add all new clients to a bulk send list in DocuSign, so I can efficiently send welcome packets to everyone at once.

#### Fields

| Field Name     | Field Type | Required |
| -------------- | ---------- | -------- |
| bulkSendListId | String     | Yes      |
| envelopeId     | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "add-to-bulk-send-list",
  "state": "inDev",
  "meta": {
    "short": "Add to Bulk Send List",
    "description": "Adds an envelope to a bulk send list in Docusign."
  },
  "input": [
    {
      "name": "bulkSendListId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the bulk send list."
      }
    },
    {
      "name": "envelopeId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the envelope to add to the bulk send list."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the operation was successful."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/bulk_send_lists/{{bulkSendListId}}/envelopes",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"envelopeId\": \"{{envelopeId}}\"}",
          "placeholders": [
            {
              "name": "envelopeId",
              "type": "String",
              "description": "The ID of the envelope to add to the bulk send list.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Bulk Send Envelope From Template

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Bulk Send Envelope From Template action sends personalized envelopes to multiple recipients using a single template.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to bulk send personalized onboarding contracts from a template to 50 new employees, so each receives their tailored agreement automatically.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| templateId | String     | Yes      |
| recipients | Array      | Yes      |
| status     | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "bulk-send-envelope-from-template",
  "state": "inDev",
  "meta": {
    "short": "Bulk Send Envelope From Template",
    "description": "Sends an envelope to multiple recipients using a template."
  },
  "input": [
    {
      "name": "templateId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the template to use for the envelope."
      }
    },
    {
      "name": "recipients",
      "type": "Array",
      "required": true,
      "meta": {
        "description": "List of recipient objects, each containing email, name, and roleName."
      }
    },
    {
      "name": "status",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The status of the envelope. Default is 'sent'.",
        "default": "sent"
      }
    }
  ],
  "output": [
    {
      "name": "envelopeId",
      "type": "String",
      "selector": ["envelopeId"],
      "meta": {
        "description": "The ID of the created envelope."
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the envelope."
      }
    },
    {
      "name": "uri",
      "type": "String",
      "selector": ["uri"],
      "meta": {
        "description": "The URI of the created envelope."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/envelopes",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"templateId\":\"{{templateId}}\",\"status\":\"{{status}}\",\"templateRoles\":{{recipients}}}",
          "placeholders": [
            {
              "name": "templateId",
              "type": "String",
              "description": "The ID of the template to use for the envelope.",
              "required": true
            },
            {
              "name": "status",
              "type": "String",
              "description": "The status of the envelope.",
              "required": false,
              "default": "sent"
            },
            {
              "name": "recipients",
              "type": "String",
              "description": "JSON array of recipient objects.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Draft Signature Request

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Draft Signature Request action prepares a new envelope in Docusign with documents and recipients but does not send it yet, allowing for review or modifications before sending.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a draft signature request so I can review and adjust the documents and recipients before sending it out for signatures.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| templateId  | String     | Yes      |
| signerEmail | String     | Yes      |
| signerName  | String     | Yes      |
| subject     | String     | No       |
| message     | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-draft-signature-request",
  "state": "inDev",
  "meta": {
    "short": "Create Draft Signature Request",
    "description": "Creates a draft signature request in DocuSign"
  },
  "input": [
    {
      "name": "templateId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the template to use for the signature request"
      }
    },
    {
      "name": "signerEmail",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The email of the signer"
      }
    },
    {
      "name": "signerName",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the signer"
      }
    },
    {
      "name": "subject",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The subject of the signature request email"
      }
    },
    {
      "name": "message",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The message body of the signature request email"
      }
    }
  ],
  "output": [
    {
      "name": "envelopeId",
      "type": "String",
      "selector": ["envelopeId"],
      "meta": {
        "description": "The ID of the created envelope"
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the created envelope"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/envelopes",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"status\":\"created\",\"templateId\":\"{{templateId}}\",\"templateRoles\":[{\"email\":\"{{signerEmail}}\",\"name\":\"{{signerName}}\",\"roleName\":\"signer\"}],\"emailSubject\":\"{{subject}}\",\"emailBlurb\":\"{{message}}\"}",
          "placeholders": [
            {
              "name": "templateId",
              "type": "String",
              "description": "The ID of the template to use for the signature request",
              "required": true
            },
            {
              "name": "signerEmail",
              "type": "String",
              "description": "The email of the signer",
              "required": true
            },
            {
              "name": "signerName",
              "type": "String",
              "description": "The name of the signer",
              "required": true
            },
            {
              "name": "subject",
              "type": "String",
              "description": "The subject of the signature request email",
              "required": false
            },
            {
              "name": "message",
              "type": "String",
              "description": "The message body of the signature request email",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Template from Document

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Template from Document action converts an uploaded document into a reusable Docusign template with defined fields, recipients, and routing rules.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a template from a document so I can reuse it for future signature requests without rebuilding the form each time.

#### Fields

| Field Name          | Field Type | Required |
| ------------------- | ---------- | -------- |
| accountId           | String     | Yes      |
| documentId          | String     | Yes      |
| templateName        | String     | Yes      |
| templateDescription | String     | No       |
| templateId          | String     | -        |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-template-from-document",
  "state": "inDev",
  "meta": {
    "short": "Create Template from Document",
    "description": "Creates a template from an existing document in DocuSign."
  },
  "input": [
    {
      "name": "accountId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The DocuSign account ID."
      }
    },
    {
      "name": "documentId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the document to convert into a template."
      }
    },
    {
      "name": "templateName",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the new template."
      }
    },
    {
      "name": "templateDescription",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The description of the new template."
      }
    }
  ],
  "output": [
    {
      "name": "templateId",
      "type": "String",
      "selector": ["templateId"],
      "meta": {
        "description": "The ID of the created template."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/templates",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"name\":\"{{templateName}}\",\"description\":\"{{templateDescription}}\",\"documents\":[{\"documentId\":\"{{documentId}}\"}]}",
          "placeholders": [
            {
              "name": "templateName",
              "type": "String",
              "description": "The name of the new template.",
              "required": true
            },
            {
              "name": "templateDescription",
              "type": "String",
              "description": "The description of the new template.",
              "required": false
            },
            {
              "name": "documentId",
              "type": "String",
              "description": "The ID of the document to convert into a template.",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Delete Document From Workspace

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Delete Document From Workspace action permanently removes a specified document from a Docusign workspace.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to delete an outdated document from my workspace to keep my files organized and avoid confusion with current versions.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| workspaceId | String     | Yes      |
| documentId  | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "delete-document-from-workspace",
  "state": "inDev",
  "meta": {
    "short": "Delete Document From Workspace",
    "description": "Deletes a document from a specified workspace in Docusign."
  },
  "input": [
    {
      "name": "workspaceId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the workspace from which the document will be deleted."
      }
    },
    {
      "name": "documentId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the document to be deleted."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the document was successfully deleted."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "DELETE",
        "path": "/v2.1/workspaces/{{workspaceId}}/folders/{{folderId}}/files/{{documentId}}",
        "headers": {
          "Content-Type": "application/json"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Send Envelope Using Document

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Send Envelope Using Document action initiates a signature request by sending a specified document to designated recipients via Docusign.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to send a contract for signature using a prepared document so the recipient can review and sign it quickly.

#### Fields

| Field Name     | Field Type | Required |
| -------------- | ---------- | -------- |
| documentId     | String     | Yes      |
| recipientEmail | String     | Yes      |
| recipientName  | String     | Yes      |
| subject        | String     | No       |
| message        | String     | No       |
| envelopeId     | String     | No       |
| status         | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "send-envelope-using-document",
  "state": "inDev",
  "meta": {
    "short": "Send Envelope Using Document",
    "description": "Sends an envelope using a document in Docusign."
  },
  "input": [
    {
      "name": "documentId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the document to be sent."
      }
    },
    {
      "name": "recipientEmail",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The email of the recipient."
      }
    },
    {
      "name": "recipientName",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The name of the recipient."
      }
    },
    {
      "name": "subject",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The subject of the envelope."
      }
    },
    {
      "name": "message",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The message to be included in the envelope."
      }
    }
  ],
  "output": [
    {
      "name": "envelopeId",
      "type": "String",
      "selector": ["envelopeId"],
      "meta": {
        "description": "The ID of the sent envelope."
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the sent envelope."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/envelopes",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\n  \"emailSubject\": \"{{subject}}\",\n  \"documents\": [\n    {\n      \"documentId\": \"{{documentId}}\",\n      \"name\": \"Document\"\n    }\n  ],\n  \"recipients\": {\n    \"signers\": [\n      {\n        \"email\": \"{{recipientEmail}}\",\n        \"name\": \"{{recipientName}}\",\n        \"recipientId\": \"1\",\n        \"routingOrder\": \"1\"\n      }\n    ]\n  },\n  \"status\": \"sent\"\n}",
          "placeholders": [
            {
              "name": "accountId",
              "type": "String",
              "description": "The ID of the Docusign account.",
              "required": true
            },
            {
              "name": "accessToken",
              "type": "String",
              "description": "The access token for Docusign API.",
              "required": true
            },
            {
              "name": "documentId",
              "type": "String",
              "description": "The ID of the document to be sent.",
              "required": true
            },
            {
              "name": "recipientEmail",
              "type": "String",
              "description": "The email of the recipient.",
              "required": true
            },
            {
              "name": "recipientName",
              "type": "String",
              "description": "The name of the recipient.",
              "required": true
            },
            {
              "name": "subject",
              "type": "String",
              "description": "The subject of the envelope.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Pause Maestro Workflow Instance

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Pause Maestro Workflow Instance action temporarily halts an active workflow to prevent further processing until resumed.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to pause a Maestro workflow instance so that I can review and adjust the document before it proceeds to the next step.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| workflowID | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "pause-maestro-workflow-instance",
  "state": "inDev",
  "meta": {
    "short": "Pause Maestro Workflow Instance",
    "description": "Pauses an active Maestro workflow instance in Corteza."
  },
  "input": [
    {
      "name": "workflowID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the workflow instance to pause."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the workflow instance was successfully paused."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/workflow/instances/{{workflowID}}/pause",
        "headers": {
          "Content-Type": "application/json"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Trigger Maestro Workflow

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Trigger Maestro Workflow action initiates a predefined Maestro workflow in DocuSign to automate document processing steps.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to trigger a Maestro workflow so that my contract gets automatically routed for approval after signing.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| workflowId | String     | Yes      |
| envelopeId | String     | Yes      |
| payload    | Object     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "trigger-maestro-workflow",
  "state": "inDev",
  "meta": {
    "short": "Trigger Maestro Workflow",
    "description": "Triggers a Maestro workflow in Docusign"
  },
  "input": [
    {
      "name": "workflowId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the Maestro workflow to trigger"
      }
    },
    {
      "name": "envelopeId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the envelope to associate with the workflow"
      }
    },
    {
      "name": "payload",
      "type": "Object",
      "required": false,
      "meta": {
        "description": "Additional payload data for the workflow"
      }
    }
  ],
  "output": [
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "Status of the triggered workflow"
      }
    },
    {
      "name": "workflowInstanceId",
      "type": "String",
      "selector": ["workflowInstanceId"],
      "meta": {
        "description": "ID of the triggered workflow instance"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/maestro/workflows/{{workflowId}}/instances",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"envelopeId\": \"{{envelopeId}}\", \"payload\": {{payload}}}",
          "placeholders": [
            {
              "name": "envelopeId",
              "type": "String",
              "description": "The ID of the envelope to associate with the workflow",
              "required": true
            },
            {
              "name": "payload",
              "type": "Object",
              "description": "Additional payload data for the workflow",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Restore Workspace User Access

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Draft Signature Request action prepares a signature request as a draft, allowing you to review and edit it before sending.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to restore a team member’s access to our DocuSign workspace after their temporary leave, so they can resume managing and reviewing documents.

#### Fields

| Field Name  | Field Type | Required |
| ----------- | ---------- | -------- |
| workspaceId | String     | Yes      |
| userId      | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "restore-workspace-user-access",
  "state": "inDev",
  "meta": {
    "short": "Restore Workspace User Access",
    "description": "Restores user access to a workspace in Docusign."
  },
  "input": [
    {
      "name": "workspaceId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the workspace."
      }
    },
    {
      "name": "userId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the user."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the operation was successful."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/workspaces/{{workspaceId}}/users/{{userId}}/restore",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Signature Request

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Signature Request action generates and sends a new envelope for one or more recipients to sign electronically.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a signature request for a new client contract, so they can review and sign it quickly and securely.

#### Fields

| Field Name   | Field Type | Required |
| ------------ | ---------- | -------- |
| emailSubject | String     | Yes      |
| templateId   | String     | Yes      |
| recipients   | Array      | Yes      |
| status       | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-signature-request",
  "state": "inDev",
  "meta": {
    "short": "Create Signature Request",
    "description": "Creates a new signature request in Docusign"
  },
  "input": [
    {
      "name": "emailSubject",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The subject of the email sent to recipients"
      }
    },
    {
      "name": "templateId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the template to use for the signature request"
      }
    },
    {
      "name": "recipients",
      "type": "Array",
      "required": true,
      "meta": {
        "description": "List of recipient emails and roles"
      }
    },
    {
      "name": "status",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The status of the envelope (e.g., 'sent', 'created')",
        "default": "sent"
      }
    }
  ],
  "output": [
    {
      "name": "envelopeId",
      "type": "String",
      "selector": ["envelopeId"],
      "meta": {
        "description": "The ID of the created envelope"
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the envelope"
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountId}}/envelopes",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"emailSubject\":\"{{emailSubject}}\",\"templateId\":\"{{templateId}}\",\"status\":\"{{status}}\",\"templateRoles\":{{recipients}}}",
          "placeholders": [
            {
              "name": "emailSubject",
              "type": "String",
              "description": "The subject of the email sent to recipients",
              "required": true
            },
            {
              "name": "templateId",
              "type": "String",
              "description": "The ID of the template to use for the signature request",
              "required": true
            },
            {
              "name": "status",
              "type": "String",
              "description": "The status of the envelope",
              "required": false,
              "default": "sent"
            },
            {
              "name": "recipients",
              "type": "Array",
              "description": "List of recipient emails and roles",
              "required": true
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Update Template

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Update Template action modifies an existing template, such as adding fields, changing text, or updating recipient roles.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to update our standard NDA template in DocuSign to include a new compliance clause, so all future agreements automatically reflect the latest legal requirements.

#### Fields

| Field Name          | Field Type | Required |
| ------------------- | ---------- | -------- |
| templateId          | String     | Yes      |
| templateName        | String     | No       |
| templateDescription | String     | No       |
| templateRoles       | Array      | No       |
| templateDocuments   | Array      | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "update-template",
  "state": "inDev",
  "meta": {
    "short": "Update Template",
    "description": "Updates an existing template in Docusign with the provided details."
  },
  "input": [
    {
      "name": "templateId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the template to update."
      }
    },
    {
      "name": "templateName",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The new name for the template."
      }
    },
    {
      "name": "templateDescription",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The new description for the template."
      }
    },
    {
      "name": "templateRoles",
      "type": "Array",
      "required": false,
      "meta": {
        "description": "The new roles for the template."
      }
    },
    {
      "name": "templateDocuments",
      "type": "Array",
      "required": false,
      "meta": {
        "description": "The new documents for the template."
      }
    }
  ],
  "output": [
    {
      "name": "templateId",
      "type": "String",
      "selector": ["templateId"],
      "meta": {
        "description": "The ID of the updated template."
      }
    },
    {
      "name": "templateName",
      "type": "String",
      "selector": ["name"],
      "meta": {
        "description": "The name of the updated template."
      }
    },
    {
      "name": "templateUri",
      "type": "String",
      "selector": ["uri"],
      "meta": {
        "description": "The URI of the updated template."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "PUT",
        "path": "/v2.1/accounts/{{accountId}}/templates/{{templateId}}",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{\"name\": \"{{templateName}}\", \"description\": \"{{templateDescription}}\", \"roles\": {{templateRoles}}, \"documents\": {{templateDocuments}}}",
          "placeholders": [
            {
              "name": "templateName",
              "type": "String",
              "description": "The new name for the template.",
              "required": false
            },
            {
              "name": "templateDescription",
              "type": "String",
              "description": "The new description for the template.",
              "required": false
            },
            {
              "name": "templateRoles",
              "type": "Array",
              "description": "The new roles for the template.",
              "required": false
            },
            {
              "name": "templateDocuments",
              "type": "Array",
              "description": "The new documents for the template.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Void Envelope

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Void Envelope action cancels a sent envelope, preventing any further signing or access by recipients.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to void a DocuSign envelope sent to the wrong client, so I can correct the recipient and resend the document.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| envelopeId | String     | Yes      |
| voidReason | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "void-envelope",
  "state": "inDev",
  "meta": {
    "short": "Void Envelope",
    "description": "Voids an envelope in DocuSign, making it unavailable for further actions."
  },
  "input": [
    {
      "name": "envelopeId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the envelope to void."
      }
    },
    {
      "name": "voidReason",
      "type": "String",
      "required": false,
      "meta": {
        "description": "The reason for voiding the envelope."
      }
    }
  ],
  "output": [
    {
      "name": "success",
      "type": "Boolean",
      "selector": ["success"],
      "meta": {
        "description": "Indicates whether the envelope was successfully voided."
      }
    },
    {
      "name": "status",
      "type": "String",
      "selector": ["status"],
      "meta": {
        "description": "The status of the void operation."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "PUT",
        "path": {
          "value": "/v2.1/accounts/{{accountId}}/envelopes/{{envelopeId}}",
          "placeholders": [
            {
              "name": "accountId",
              "type": "String",
              "description": "The DocuSign account ID.",
              "required": true
            },
            {
              "name": "envelopeId",
              "type": "String",
              "description": "The ID of the envelope to void.",
              "required": true
            }
          ]
        },
        "headers": {
          "Content-Type": {
            "value": "application/json"
          }
        },
        "bodyTemplate": {
          "value": "{\"status\": \"voided\", \"voidedReason\": \"{{voidReason}}\"}",
          "placeholders": [
            {
              "name": "voidReason",
              "type": "String",
              "description": "The reason for voiding the envelope.",
              "required": false
            }
          ]
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Action: Create Envelope with Base URL and Account ID Input

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Create Envelope with Base URL and Account ID Input action generates a new envelope for signing by specifying the DocuSign account and base API URL, allowing customization for different environments or accounts.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to create a signature request using our EU DocuSign account’s base URL and account ID, so the envelope is generated in the correct regional environment for compliance.

#### Fields

| Field Name         | Field Type | Required |
| ------------------ | ---------- | -------- |
| baseURL            | String     | Yes      |
| accountID          | String     | Yes      |
| envelopeDefinition | String     | Yes      |
| envelopeID         | String     | No       |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "create-envelope",
  "state": "inDev",
  "meta": {
    "short": "Create Envelope",
    "description": "Creates a new envelope in DocuSign with the provided base URL and account ID."
  },
  "input": [
    {
      "name": "baseURL",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The base URL for the DocuSign API."
      }
    },
    {
      "name": "accountID",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The account ID for the DocuSign account."
      }
    },
    {
      "name": "envelopeDefinition",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The envelope definition in JSON format."
      }
    }
  ],
  "output": [
    {
      "name": "envelopeID",
      "type": "String",
      "selector": ["envelopeId"],
      "meta": {
        "description": "The ID of the created envelope."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "POST",
        "path": "/v2.1/accounts/{{accountID}}/envelopes",
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyTemplate": {
          "value": "{{envelopeDefinition}}"
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


# Query: Find Documents List for Envelope

Docusign Operation

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscriptions</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/NqT6jFUNiB68dGrhBI5F" alt=""><figcaption></figcaption></figure>

<p align="center">The Find Documents List for Envelope query retrieves a list of all documents included in a specific DocuSign envelope.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### Example User Story

I want to find the list of documents in a signed DocuSign envelope, so I can verify all required attachments were included before archiving.

#### Fields

| Field Name | Field Type | Required |
| ---------- | ---------- | -------- |
| envelopeId | String     | Yes      |

### Related Connections

[Docusign](/human-connections/docusign/docusign)

### Related Automations

Example link

### Code (Apache v2.0): Operation

```
{
  "handle": "find-documents-list-for-envelope",
  "state": "inDev",
  "meta": {
    "short": "Find Documents List for Envelope",
    "description": "Retrieves the list of documents associated with a specific envelope in Docusign."
  },
  "input": [
    {
      "name": "envelopeId",
      "type": "String",
      "required": true,
      "meta": {
        "description": "The ID of the envelope for which to retrieve the documents list."
      }
    }
  ],
  "output": [
    {
      "name": "documents",
      "type": "Array",
      "selector": ["documents"],
      "meta": {
        "description": "List of documents associated with the envelope."
      }
    }
  ],
  "steps": [
    {
      "type": "http",
      "http": {
        "method": "GET",
        "path": "/v2.1/accounts/{{accountId}}/envelopes/{{envelopeId}}/documents",
        "headers": {
          "Accept": "application/json"
        },
        "queryParams": {},
        "bodyTemplate": {
          "value": "",
          "placeholders": []
        }
      }
    }
  ]
}

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>




---

[Next Page](/llms-full.txt/1)

