{
  "components": {
    "headers": {
      "RateLimit": {
        "description": "Live state of the most-constrained quota policy applied to this request (draft-ietf-httpapi-ratelimit-headers): remaining requests (r) and seconds until the budget is full again (t).",
        "schema": {
          "type": "string"
        }
      },
      "RateLimitPolicy": {
        "description": "Every quota policy applied to this request (draft-ietf-httpapi-ratelimit-headers `RateLimit-Policy`): capacity (q) and window seconds (w) per policy.",
        "schema": {
          "type": "string"
        }
      },
      "RetryAfter": {
        "description": "Seconds to wait before retrying a rate-limited request.",
        "schema": {
          "type": "integer"
        }
      }
    },
    "schemas": {
      "Error": {
        "description": "The typed error object every JSON endpoint uses for 4xx/5xx responses (shared with the versioned REST API at https://api.adam.new/v1): a stable machine-readable code in `error.type`, a human-readable `error.message`, and a `requestId` to quote to support.",
        "properties": {
          "error": {
            "properties": {
              "message": {
                "description": "Human-readable explanation of the failure.",
                "type": "string"
              },
              "requestId": {
                "description": "Correlation id for this request; include it in support reports.",
                "type": "string"
              },
              "type": {
                "description": "Stable machine-readable error code.",
                "enum": [
                  "invalid_request",
                  "authentication_error",
                  "permission_error",
                  "not_found",
                  "conflict",
                  "validation_error",
                  "rate_limit_error",
                  "api_error",
                  "request_error"
                ],
                "type": "string"
              }
            },
            "required": [
              "type",
              "message"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "personalApiKey": {
        "bearerFormat": "adam_pk_...",
        "description": "Personal Adam API key created in team settings. Send it as Authorization: Bearer <key>.",
        "scheme": "bearer",
        "type": "http"
      },
      "adamId": {
        "description": "Adam ID OAuth 2.0: authorization code with PKCE (S256). Discovery: RFC 8414 metadata at /.well-known/oauth-authorization-server, RFC 9728 protected-resource metadata at /.well-known/oauth-protected-resource.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://api.adam.new/auth/oauth2/authorize",
            "refreshUrl": "https://api.adam.new/auth/oauth2/token",
            "scopes": {
              "email": "Read the signed-in user's email address (OIDC email claims).",
              "offline_access": "Hold a refresh token so access can be renewed without a new sign-in.",
              "openid": "Sign in with Adam ID (OIDC id_token).",
              "profile": "Read the signed-in user's basic profile (name, picture, OIDC profile claims).",
              "automations:read": "List and inspect automations in the selected workspace.",
              "automations:write": "Create, edit, pause, resume, and delete automations in the selected workspace.",
              "billing:read": "Read subscription, entitlement, and usage information for the selected workspace.",
              "files:read": "List files produced by projects and tasks.",
              "files:write": "Upload task attachments and project files.",
              "integrations:read": "List available and connected integrations in the selected workspace.",
              "projects:read": "List and read projects in the selected workspace.",
              "projects:write": "Create and update projects in the selected workspace.",
              "tasks:read": "List tasks, task status, and task messages.",
              "tasks:write": "Create, update, message, answer, and cancel tasks in the selected workspace."
            },
            "tokenUrl": "https://api.adam.new/auth/oauth2/token"
          }
        },
        "type": "oauth2"
      },
      "adamIdOidc": {
        "description": "OpenID Connect sign-in with Adam ID.",
        "openIdConnectUrl": "https://api.adam.new/auth/.well-known/openid-configuration",
        "type": "openIdConnect"
      }
    }
  },
  "info": {
    "contact": {
      "name": "Adam",
      "url": "https://adam.new"
    },
    "description": "The public HTTP surface of https://adam.new: shared-task read endpoints, the authenticated Adam MCP, Adam ID OAuth 2.0 / OpenID Connect discovery, and machine-readable site files. The full product API used by the Adam app requires a signed-in session and is not a stable public API. Documentation: https://docs.adam.new. Marketing and blog pages are also served as Markdown via content negotiation (request them with an `Accept: text/markdown` header), and the same authenticated workspace tools are available through MCP at https://adam.new/mcp (Streamable HTTP transport).\n\n## Versioning and deprecation\n\nThe stable Adam developer REST API is versioned in the URL path: https://api.adam.new/v1 (its own OpenAPI document: https://api.adam.new/openapi.json; guide: https://docs.adam.new/api-reference/introduction). Backwards-compatible additions ship within `/v1`; breaking changes ship as a new major version (`/v2`) alongside the old one. The unversioned paths in THIS document are durable protocol and share-link surfaces pinned to standards (OAuth discovery, MCP, llms.txt) rather than to an API version. Any surface scheduled for removal carries `Deprecation` and `Sunset` headers at least 90 days before the retirement date, announced at https://adam.new/changelog.\n\n## Errors and rate limits\n\nAll 4xx/5xx JSON responses use the typed `Error` schema in this document's components: a stable machine-readable `error.type` plus a human-readable `error.message`. Rate-limited surfaces report quota via the standard `RateLimit` and `RateLimit-Policy` response headers, and every `429` includes `Retry-After` in seconds.",
    "termsOfService": "https://adam.new/terms-of-service",
    "title": "Adam public API",
    "version": "0.1.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/.well-known/oauth-authorization-server": {
      "get": {
        "description": "RFC 8414 OAuth 2.0 authorization-server metadata for Adam ID (endpoints, grant types, scopes).",
        "operationId": "getOauthAuthorizationServerMetadata",
        "security": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object"
                }
              }
            },
            "description": "Authorization-server metadata document."
          }
        },
        "summary": "OAuth 2.0 authorization-server metadata",
        "tags": [
          "oauth"
        ]
      }
    },
    "/.well-known/mcp.json": {
      "get": {
        "description": "MCP server manifest (registry server.json shape) pointing at the Streamable HTTP endpoint.",
        "operationId": "getMcpManifest",
        "security": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object"
                }
              }
            },
            "description": "MCP server manifest."
          }
        },
        "summary": "MCP server manifest",
        "tags": [
          "site"
        ]
      }
    },
    "/.well-known/oauth-protected-resource": {
      "get": {
        "description": "RFC 9728 protected-resource metadata: the Adam ID authorization server protecting this origin and the OAuth scopes it supports.",
        "operationId": "getOauthProtectedResourceMetadata",
        "security": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object"
                }
              }
            },
            "description": "Protected-resource metadata document."
          }
        },
        "summary": "OAuth 2.0 protected-resource metadata",
        "tags": [
          "oauth"
        ]
      }
    },
    "/.well-known/openid-configuration": {
      "get": {
        "description": "OpenID Connect discovery document for Adam ID, the companion to the RFC 8414 metadata.",
        "operationId": "getOpenidConfiguration",
        "security": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object"
                }
              }
            },
            "description": "OpenID Connect discovery document."
          }
        },
        "summary": "OpenID Connect discovery",
        "tags": [
          "oauth"
        ]
      }
    },
    "/api/share/{token}": {
      "get": {
        "description": "Full snapshot of a publicly shared task: transcript and file listing. Always answers 200: an unknown or revoked token yields `task: null` with empty `messages`, and a password-protected link without a valid `grant` yields `task: null` with `passwordRequired: true` (see the unlock endpoint). Check `task` for null before using the snapshot.",
        "operationId": "getSharedTask",
        "security": [],
        "parameters": [
          {
            "description": "Unguessable share-link token, from a task share URL (adam.new/share/{token}).",
            "in": "path",
            "name": "token",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Unlock grant returned by the unlock endpoint, required for password-protected links.",
            "in": "query",
            "name": "grant",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "messages": {
                      "items": {
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "passwordRequired": {
                      "type": "boolean"
                    },
                    "task": {
                      "type": [
                        "object",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Shared task snapshot; `task` is null for unknown/revoked tokens and locked links.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded. Wait `Retry-After` seconds before retrying.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            }
          }
        },
        "summary": "Read a shared task",
        "tags": [
          "share"
        ]
      }
    },
    "/api/share/{token}/files/{fileId}/content": {
      "get": {
        "description": "302 redirect to a short-lived signed URL for a shared task file. The redirect target expires, so follow it immediately and do not cache it.",
        "operationId": "getSharedTaskFileContent",
        "security": [],
        "parameters": [
          {
            "description": "Unguessable share-link token, from a task share URL (adam.new/share/{token}).",
            "in": "path",
            "name": "token",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "File id from the shared task snapshot.",
            "in": "path",
            "name": "fileId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Optional rendition role (e.g. a preview).",
            "in": "query",
            "name": "rendition",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Unlock grant for password-protected links (see the unlock endpoint).",
            "in": "query",
            "name": "grant",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "302": {
            "description": "Redirect to a short-lived signed content URL.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unknown token or file."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded. Wait `Retry-After` seconds before retrying.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            }
          }
        },
        "summary": "Download a shared task file",
        "tags": [
          "share"
        ]
      }
    },
    "/api/share/{token}/meta": {
      "get": {
        "description": "Title-only metadata for a shared task, used for link unfurl cards. Never includes the transcript. Always answers 200: an unknown token yields `title: null`, and a password-protected link yields `title: null` with `passwordRequired: true`.",
        "operationId": "getSharedTaskMeta",
        "security": [],
        "parameters": [
          {
            "description": "Unguessable share-link token, from a task share URL (adam.new/share/{token}).",
            "in": "path",
            "name": "token",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "passwordRequired": {
                      "type": "boolean"
                    },
                    "title": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Share metadata; `title` is null for unknown tokens and locked links.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded. Wait `Retry-After` seconds before retrying.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            }
          }
        },
        "summary": "Shared task metadata",
        "tags": [
          "share"
        ]
      }
    },
    "/api/share/{token}/unlock": {
      "post": {
        "description": "Exchange a password-protected share link's password for an unlock grant. A wrong password answers 200 with `grant: null`; repeated failures are rate limited (429).",
        "operationId": "unlockSharedTask",
        "security": [],
        "parameters": [
          {
            "description": "Unguessable share-link token, from a task share URL (adam.new/share/{token}).",
            "in": "path",
            "name": "token",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "password": {
                    "type": "string"
                  }
                },
                "required": [
                  "password"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "grant": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Unlock result; `grant` is null when the password is wrong.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded. Wait `Retry-After` seconds before retrying.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            }
          }
        },
        "summary": "Unlock a password-protected share link",
        "tags": [
          "share"
        ]
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "getLlmsTxt",
        "security": [],
        "responses": {
          "200": {
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Curated Markdown index of the site for agents."
          }
        },
        "summary": "llms.txt agent index",
        "tags": [
          "site"
        ]
      }
    },
    "/mcp": {
      "post": {
        "description": "Authenticated Model Context Protocol server for managing Adam projects, tasks, messages, interactions, and files. The edge forwards the Streamable HTTP exchange to the API app. Manifest: /.well-known/mcp.json",
        "operationId": "postMcp",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "type": "object"
                }
              }
            },
            "description": "JSON-RPC response message(s)."
          },
          "202": {
            "description": "Notification accepted (no response body)."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Missing or invalid Bearer credential. `WWW-Authenticate` points at the RFC 9728 resource metadata."
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded. Wait `Retry-After` seconds before retrying.",
            "headers": {
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            }
          }
        },
        "security": [
          {
            "personalApiKey": []
          },
          {
            "adamId": []
          }
        ],
        "summary": "MCP server (Streamable HTTP)",
        "tags": [
          "site"
        ]
      }
    },
    "/rss.xml": {
      "get": {
        "operationId": "getRssFeed",
        "security": [],
        "responses": {
          "200": {
            "content": {
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "RSS 2.0 feed of blog posts."
          }
        },
        "summary": "Blog RSS feed",
        "tags": [
          "site"
        ]
      }
    },
    "/sitemap.xml": {
      "get": {
        "operationId": "getSitemap",
        "security": [],
        "responses": {
          "200": {
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Sitemap of every public page."
          }
        },
        "summary": "XML sitemap",
        "tags": [
          "site"
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://adam.new"
    }
  ],
  "tags": [
    {
      "description": "Public shared-task read surface.",
      "name": "share"
    },
    {
      "description": "Adam ID OAuth 2.0 / OpenID Connect discovery.",
      "name": "oauth"
    },
    {
      "description": "Machine-readable site files.",
      "name": "site"
    }
  ]
}