{
  "opencollection": "1.0.0",
  "info": {
    "name": "Duvo Public Agent Folders Credentials API",
    "version": "1.0.0"
  },
  "items": [
    {
      "info": {
        "name": "Credentials",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List Revision Logins",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/agents/:agentId/revisions/:buildId/logins",
            "params": [
              {
                "name": "agentId",
                "value": "",
                "type": "path"
              },
              {
                "name": "buildId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "List logins attached to a specific revision (build) of an assignment. Returns metadata only — passwords and OTP secrets are never exposed."
        },
        {
          "info": {
            "name": "Attach Revision Login",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/agents/:agentId/revisions/:buildId/logins",
            "params": [
              {
                "name": "agentId",
                "value": "",
                "type": "path"
              },
              {
                "name": "buildId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Attach a login to a revision so the agent can use it during Runs spawned from that revision. Personal logins can only be attached by their owner; team-shared logins require builder permissions."
        },
        {
          "info": {
            "name": "Detach Revision Login",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://api.duvo.ai/v2/agents/:agentId/revisions/:buildId/logins/:exposedCredentialId",
            "params": [
              {
                "name": "agentId",
                "value": "",
                "type": "path"
              },
              {
                "name": "buildId",
                "value": "",
                "type": "path"
              },
              {
                "name": "exposedCredentialId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Detach a login from a revision. Personal logins can only be detached by their owner; team-shared logins require builder permissions."
        },
        {
          "info": {
            "name": "List credentials for user and team",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/teams/:teamId/browser-agent/credentials/:userId",
            "params": [
              {
                "name": "domain",
                "value": "",
                "type": "query"
              },
              {
                "name": "userId",
                "value": "",
                "type": "path"
              },
              {
                "name": "teamId",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "List browser-login credentials visible to the caller for the current team — team-shared (user_id IS NULL) plus the caller's own personal logins. Optionally filter by `domain`. Passwords and OTP secrets are never returned; only metadata flags indicating whether they are set."
        },
        {
          "info": {
            "name": "Create credential",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.duvo.ai/v2/teams/:teamId/browser-agent/credentials/:userId",
            "params": [
              {
                "name": "userId",
                "value": "",
                "type": "path"
              },
              {
                "name": "teamId",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Create a login. At least one of `password` or `otp_secret` must be provided. Personal by default; pass `shared: true` to create a team-shared login (requires manager role)."
        },
        {
          "info": {
            "name": "Get credential by id",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.duvo.ai/v2/teams/:teamId/browser-agent/credentials/:userId/:id",
            "params": [
              {
                "name": "userId",
                "value": "",
                "type": "path"
              },
              {
                "name": "teamId",
                "value": "",
                "type": "path"
              },
              {
                "name": "id",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Get a login by id. Returns the encrypted password/otp_secret blobs — only the owner or team members can access it."
        },
        {
          "info": {
            "name": "Update credential by id",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "https://api.duvo.ai/v2/teams/:teamId/browser-agent/credentials/:userId/:id",
            "params": [
              {
                "name": "userId",
                "value": "",
                "type": "path"
              },
              {
                "name": "teamId",
                "value": "",
                "type": "path"
              },
              {
                "name": "id",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Update a login by id. At least one of password or otp_secret must remain set after the update. Editing a team-shared login or toggling sharing requires manager role."
        },
        {
          "info": {
            "name": "Delete credential by id",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://api.duvo.ai/v2/teams/:teamId/browser-agent/credentials/:userId/:id",
            "params": [
              {
                "name": "userId",
                "value": "",
                "type": "path"
              },
              {
                "name": "teamId",
                "value": "",
                "type": "path"
              },
              {
                "name": "id",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Delete a login by id. Deleting a team-shared login requires manager role."
        }
      ]
    }
  ],
  "bundled": true
}