{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/customdomain-ai/json-schema/customdomain-ai-provider-info-schema.json",
  "title": "ProviderInfo",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/customdomain-ai-providers-api-openapi.yml#/components/schemas/ProviderInfo",
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "rail": {
      "type": "string",
      "description": "dc | oauth | api | manual"
    },
    "oauth": {
      "type": "boolean"
    },
    "account_ways": {
      "type": "array",
      "description": "The ways to add this company's account in Connected accounts, easiest first: `oauth` (the person signs in with the company and the account is made from the OAuth grant, kept with its refresh token; `POST /provider-accounts:oauth-start`, the console only), then `secure_sign_in` (the person signs in at the company and CustomDomain™ makes the key; `POST /provider-accounts:sign-in`, the console only), then `api_key` (the person pastes a key; `POST /provider-accounts`). Always present; `[]` for a company that only signs in and takes no key. `secure_sign_in` is listed only while the deployment runs it for the company (the feature on, its key page and its domain list in place); the workspace's own gates are the sign in's to apply. `oauth` is listed only while the deployment runs the company's OAuth app, keeps what it hands back and the company's sign-in needs no domain; a company that lists it lists no `secure_sign_in`.",
      "items": {
        "type": "string",
        "enum": [
          "oauth",
          "secure_sign_in",
          "api_key"
        ]
      }
    }
  }
}