# MCP server

Connect an agent to the IndieLogs Streamable HTTP MCP server and use the same operation contract as the API.

## Endpoint and authentication

The MCP endpoint is /mcp on the configured public site origin. The server uses Streamable HTTP POST. It requires an authenticated identity, a scoped API token and an Autopilot entitlement. GET returns 405.

OAuth discovery and token verification depend on an externally operated issuer configured as MCP_ISSUER_URL; IndieLogs does not run that authorization server. The issuer must publish matching HTTPS authorization, token, dynamic-registration and JWKS endpoints with PKCE S256. Issued JWTs must use RS256, target the exact MCP_RESOURCE_URL audience and provide a verified IndieLogs account mapping in indielogs_user_id, plus the requested scopes. MCP_RESOURCE_URL is required when validating tokens even though protected-resource discovery has a fallback URL. These prerequisites and a working OAuth client must be configured and accepted separately. A scoped IndieLogs API token is the other supported credential path.

## Tools

Named tools and generic operation tools are derived from the shared contract allowlist. The table below is rendered from the registered MCP definitions; session-only operations are not exposed. The invoke_operation tool accepts only an operation included in that allowlist.

## Safety

- draft_update creates a source-backed draft and never publishes it.
- publish_draft is an explicit write and still respects ownership, token scope and draft review gates.
- Do not give an agent a database service key. Use a revocable IndieLogs token with only the scopes it needs.
- MCP is rate limited per token. Provider delivery and production OAuth acceptance require separate verification.

## Registered MCP tools

### op_revenue_disclosures

Execute IndieLogs revenue.disclosures operation.

Operation: `revenue.disclosures`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_ids": {
      "minItems": 1,
      "maxItems": 80,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    }
  },
  "required": [
    "project_ids"
  ]
}
```

### op_reports_generate

Execute IndieLogs reports.generate operation.

Operation: `reports.generate`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "idea",
        "bmc",
        "marketing"
      ]
    },
    "targetMarket": {
      "type": "string",
      "minLength": 2,
      "maxLength": 500
    },
    "ideaDescription": {
      "type": "string",
      "minLength": 8,
      "maxLength": 2000
    },
    "businessIdea": {
      "type": "string",
      "minLength": 8,
      "maxLength": 2000
    },
    "foundingTeam": {
      "type": "string",
      "maxLength": 2000
    },
    "budget": {
      "type": "string",
      "maxLength": 2000
    },
    "monthlyMarketingBudget": {
      "type": "string",
      "maxLength": 2000
    },
    "currentUserBase": {
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "kind",
    "targetMarket"
  ]
}
```

### op_reports_read

Execute IndieLogs reports.read operation.

Operation: `reports.read`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "idea",
        "bmc",
        "marketing"
      ]
    },
    "id": {
      "type": "string",
      "pattern": "^(?:[1-9]\\d{0,17}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$"
    },
    "report_access_token": {
      "type": "string",
      "minLength": 1,
      "maxLength": 512
    }
  },
  "required": [
    "kind",
    "id",
    "report_access_token"
  ]
}
```

### op_sponsorships_options

Execute IndieLogs sponsorships.options operation.

Operation: `sponsorships.options`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_sponsorships_mine

Execute IndieLogs sponsorships.mine operation.

Operation: `sponsorships.mine`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "type": "string",
      "maxLength": 500
    }
  }
}
```

### op_sponsorships_active

Execute IndieLogs sponsorships.active operation.

Operation: `sponsorships.active`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_search_public

Execute IndieLogs search.public operation.

Operation: `search.public`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "q": {
      "type": "string"
    },
    "kind": {
      "default": "all",
      "type": "string",
      "enum": [
        "all",
        "maker",
        "project",
        "update"
      ]
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    },
    "cursor": {
      "type": "string",
      "maxLength": 1600
    }
  },
  "required": [
    "q"
  ]
}
```

### op_outputs_list

Execute IndieLogs outputs.list operation.

Operation: `outputs.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "log_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "log_id"
  ]
}
```

### op_outputs_retry

Execute IndieLogs outputs.retry operation.

Operation: `outputs.retry`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "log_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "channel": {
      "type": "string",
      "enum": [
        "x",
        "linkedin",
        "webhook"
      ]
    }
  },
  "required": [
    "log_id",
    "channel"
  ]
}
```

### op_billing_read

Execute IndieLogs billing.read operation.

Operation: `billing.read`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_editions_list

Execute IndieLogs editions.list operation.

Operation: `editions.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "type": "string",
      "maxLength": 2048
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_editions_get

Execute IndieLogs editions.get operation.

Operation: `editions.get`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "iso_year": {
      "type": "integer",
      "minimum": 1900,
      "maximum": 9999
    },
    "iso_week": {
      "type": "integer",
      "minimum": 1,
      "maximum": 53
    }
  },
  "required": [
    "project_id",
    "iso_year",
    "iso_week"
  ]
}
```

### op_editions_feed

Execute IndieLogs editions.feed operation.

Operation: `editions.feed`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "type": "string",
      "maxLength": 2048
    },
    "tab": {
      "default": "everyone",
      "type": "string",
      "enum": [
        "everyone",
        "following"
      ]
    },
    "range": {
      "default": "all",
      "type": "string",
      "enum": [
        "all",
        "week",
        "month",
        "year"
      ]
    }
  }
}
```

### op_editions_mine

Execute IndieLogs editions.mine operation.

Operation: `editions.mine`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "type": "string",
      "maxLength": 2048
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_chapters_list

Execute IndieLogs chapters.list operation.

Operation: `chapters.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "type": "string",
      "maxLength": 2048
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_chapters_mine

Execute IndieLogs chapters.mine operation.

Operation: `chapters.mine`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "type": "string",
      "maxLength": 2048
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_feed_list

Execute IndieLogs feed.list operation.

Operation: `feed.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "cursor": {
      "type": "string",
      "maxLength": 2048
    },
    "sort": {
      "type": "string",
      "enum": [
        "recent",
        "trending"
      ]
    },
    "range": {
      "type": "string",
      "enum": [
        "all",
        "week",
        "month",
        "year"
      ]
    },
    "tab": {
      "type": "string",
      "enum": [
        "everyone",
        "following"
      ]
    },
    "query": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  }
}
```

### op_profiles_get

Execute IndieLogs profiles.get operation.

Operation: `profiles.get`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    }
  },
  "required": [
    "username"
  ]
}
```

### op_rankings_list

Execute IndieLogs rankings.list operation.

Operation: `rankings.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "board": {
      "type": "string",
      "enum": [
        "makers",
        "projects"
      ]
    },
    "period": {
      "type": "string",
      "enum": [
        "today",
        "week",
        "month",
        "all"
      ]
    },
    "metric": {
      "type": "string",
      "enum": [
        "updates",
        "streak",
        "mrr",
        "revenue"
      ]
    },
    "category": {
      "type": "string",
      "maxLength": 80
    },
    "type": {
      "type": "string",
      "enum": [
        "founder",
        "startup"
      ]
    },
    "query": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  }
}
```

### op_projects_directory

Execute IndieLogs projects.directory operation.

Operation: `projects.directory`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "maxLength": 80
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000
    },
    "query": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  }
}
```

### list_projects

List your projects.

Operation: `projects.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_projects_get

Execute IndieLogs projects.get operation.

Operation: `projects.get`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_projects_create

Execute IndieLogs projects.create operation.

Operation: `projects.create`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "description": {
      "type": "string",
      "maxLength": 10000
    },
    "status": {
      "type": "string",
      "maxLength": 60
    },
    "url": {
      "type": "string",
      "maxLength": 2048
    },
    "logo": {
      "type": "string",
      "maxLength": 2048
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "slug": {
      "type": "string",
      "maxLength": 120
    }
  },
  "required": [
    "name"
  ]
}
```

### op_projects_update

Execute IndieLogs projects.update operation.

Operation: `projects.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "description": {
      "type": "string",
      "maxLength": 10000
    },
    "status": {
      "type": "string",
      "maxLength": 60
    },
    "url": {
      "type": "string",
      "maxLength": 2048
    },
    "logo": {
      "type": "string",
      "maxLength": 2048
    },
    "category": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "slug": {
      "type": "string",
      "maxLength": 120
    }
  },
  "required": [
    "id"
  ]
}
```

### op_projects_delete

Execute IndieLogs projects.delete operation.

Operation: `projects.delete`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_projects_analyze

Execute IndieLogs projects.analyze operation.

Operation: `projects.analyze`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "url"
  ]
}
```

### recent_updates

Read recent published updates for one project.

Operation: `updates.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "required": [
    "project"
  ]
}
```

### op_updates_publish

Execute IndieLogs updates.publish operation.

Operation: `updates.publish`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "pattern": "^[1-9]\\d*$"
        }
      ]
    },
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    },
    "date": {
      "type": "string"
    },
    "image": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "maxLength": 2048,
          "format": "uri"
        }
      ]
    },
    "video": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "maxLength": 2048,
          "format": "uri"
        }
      ]
    },
    "items": {
      "maxItems": 16,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 280
      }
    },
    "idempotencyKey": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._:-]{1,200}$"
    }
  },
  "required": [
    "project_id",
    "description"
  ]
}
```

### op_updates_update

Execute IndieLogs updates.update operation.

Operation: `updates.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "description": {
      "type": "string",
      "maxLength": 10000
    },
    "date": {
      "type": [
        "string",
        "null"
      ]
    },
    "image": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "maxLength": 2048,
          "format": "uri"
        }
      ]
    },
    "video": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "maxLength": 2048,
          "format": "uri"
        }
      ]
    },
    "items": {
      "maxItems": 16,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 280
      }
    }
  },
  "required": [
    "id"
  ]
}
```

### op_updates_delete

Execute IndieLogs updates.delete operation.

Operation: `updates.delete`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_updates_cheer

Execute IndieLogs updates.cheer operation.

Operation: `updates.cheer`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_updates_replies_list

Execute IndieLogs updates.replies.list operation.

Operation: `updates.replies.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_updates_replies_create

Execute IndieLogs updates.replies.create operation.

Operation: `updates.replies.create`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "body_html": {
      "type": "string",
      "maxLength": 2000
    },
    "description": {
      "type": "string",
      "maxLength": 2000
    },
    "text": {
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "id"
  ]
}
```

### op_updates_replies_delete

Execute IndieLogs updates.replies.delete operation.

Operation: `updates.replies.delete`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "reply_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### get_desk

Read one page of waiting, queued, or held drafts; use offset to retrieve another page.

Operation: `drafts.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740892
    }
  }
}
```

### draft_update

Create a source-backed draft for review. It never publishes.

Operation: `drafts.from_evidence`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
        }
      ]
    },
    "summary": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    },
    "why": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "commits": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "numbers": {
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              }
            ]
          },
          "source": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          }
        },
        "required": [
          "value",
          "source"
        ],
        "additionalProperties": false
      }
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "project",
    "summary"
  ]
}
```

### op_drafts_get

Execute IndieLogs drafts.get operation.

Operation: `drafts.get`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_drafts_create

Execute IndieLogs drafts.create operation.

Operation: `drafts.create`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "summary": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    },
    "title": {
      "type": "string",
      "maxLength": 200
    },
    "description": {
      "type": "string",
      "maxLength": 10000
    },
    "why": {
      "type": "string",
      "maxLength": 2000
    },
    "commits": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "scheduled_for": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        {
          "type": "null"
        }
      ]
    },
    "publication_date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        {
          "type": "null"
        }
      ]
    },
    "visual": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "card",
            "screenshot",
            "none"
          ]
        },
        "card": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 100
            },
            {
              "type": "object",
              "properties": {
                "k": {
                  "type": "string",
                  "maxLength": 100
                },
                "big": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 100
                    },
                    {
                      "type": "number"
                    }
                  ]
                },
                "sub": {
                  "type": "string",
                  "maxLength": 300
                }
              },
              "required": [
                "k",
                "big",
                "sub"
              ]
            }
          ]
        },
        "url": {
          "type": "string",
          "maxLength": 2048,
          "format": "uri"
        },
        "caption": {
          "type": "string",
          "maxLength": 500
        }
      },
      "required": [
        "kind"
      ]
    },
    "variants": {
      "type": "object",
      "properties": {
        "x": {
          "type": "string",
          "maxLength": 3000
        },
        "linkedin": {
          "type": "string",
          "maxLength": 3000
        },
        "outputs": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "boolean"
          }
        }
      }
    },
    "idempotencyKey": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._:-]{1,200}$"
    }
  },
  "required": [
    "project_id",
    "summary"
  ]
}
```

### op_drafts_generate

Execute IndieLogs drafts.generate operation.

Operation: `drafts.generate`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "source_ids": {
      "minItems": 1,
      "maxItems": 30,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "project_id",
    "source_ids"
  ]
}
```

### op_drafts_update

Execute IndieLogs drafts.update operation.

Operation: `drafts.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "description": {
      "type": "string",
      "maxLength": 10000
    },
    "title": {
      "type": "string",
      "maxLength": 200
    },
    "scheduled_for": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        {
          "type": "null"
        }
      ]
    },
    "publication_date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        {
          "type": "null"
        }
      ]
    },
    "visual": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "card",
            "screenshot",
            "none"
          ]
        },
        "card": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 100
            },
            {
              "type": "object",
              "properties": {
                "k": {
                  "type": "string",
                  "maxLength": 100
                },
                "big": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 100
                    },
                    {
                      "type": "number"
                    }
                  ]
                },
                "sub": {
                  "type": "string",
                  "maxLength": 300
                }
              },
              "required": [
                "k",
                "big",
                "sub"
              ]
            }
          ]
        },
        "url": {
          "type": "string",
          "maxLength": 2048,
          "format": "uri"
        },
        "caption": {
          "type": "string",
          "maxLength": 500
        }
      },
      "required": [
        "kind"
      ]
    },
    "variants": {
      "type": "object",
      "properties": {
        "x": {
          "type": "string",
          "maxLength": 3000
        },
        "linkedin": {
          "type": "string",
          "maxLength": 3000
        },
        "outputs": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "boolean"
          }
        }
      }
    },
    "expected_updated_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    }
  },
  "required": [
    "id"
  ]
}
```

### op_drafts_schedule

Execute IndieLogs drafts.schedule operation.

Operation: `drafts.schedule`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "scheduled_for": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "expected_updated_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    }
  },
  "required": [
    "id",
    "scheduled_for",
    "expected_updated_at"
  ]
}
```

### publish_draft

Publish a ready draft, respecting holds.

Operation: `drafts.publish`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "draft_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "expected_updated_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "confirm_unverified": {
      "type": "boolean"
    },
    "acknowledgement": {
      "type": "string"
    }
  },
  "required": [
    "draft_id"
  ]
}
```

### op_drafts_hold

Execute IndieLogs drafts.hold operation.

Operation: `drafts.hold`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_drafts_hold_all

Execute IndieLogs drafts.hold-all operation.

Operation: `drafts.hold-all`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_drafts_skip

Execute IndieLogs drafts.skip operation.

Operation: `drafts.skip`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_drafts_rewrite

Execute IndieLogs drafts.rewrite operation.

Operation: `drafts.rewrite`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "instruction": {
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "id"
  ]
}
```

### op_drafts_release

Execute IndieLogs drafts.release operation.

Operation: `drafts.release`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "expected_updated_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    }
  },
  "required": [
    "id"
  ]
}
```

### attach_screenshot

Attach a public image or base64 screenshot to a draft.

Operation: `drafts.attach_screenshot`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "draft_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "expected_updated_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "image_base64": {
      "type": "string",
      "maxLength": 14000000
    },
    "url": {
      "type": "string",
      "format": "uri"
    },
    "caption": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "draft_id"
  ]
}
```

### op_story_publish

Execute IndieLogs story.publish operation.

Operation: `story.publish`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_story_split

Execute IndieLogs story.split operation.

Operation: `story.split`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_story_rebuild

Execute IndieLogs story.rebuild operation.

Operation: `story.rebuild`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "lookback_days": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 36500
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_story_rebuild_status

Execute IndieLogs story.rebuild-status operation.

Operation: `story.rebuild-status`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_story_decline

Execute IndieLogs story.decline operation.

Operation: `story.decline`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "edition_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "reason": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_story_undo

Execute IndieLogs story.undo operation.

Operation: `story.undo`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "edition_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_chapters_update

Execute IndieLogs chapters.update operation.

Operation: `chapters.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "title": {
      "type": "string",
      "maxLength": 120
    },
    "hidden": {
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ]
}
```

### op_voice_read

Execute IndieLogs voice.read operation.

Operation: `voice.read`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_voice_update

Execute IndieLogs voice.update operation.

Operation: `voice.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "traits": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "number",
        "minimum": 0,
        "maximum": 100
      }
    },
    "rules": {
      "maxItems": 30,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 300
      }
    },
    "banned_phrases": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    }
  }
}
```

### op_voice_try

Execute IndieLogs voice.try operation.

Operation: `voice.try`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "source_ids": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          }
        ]
      }
    },
    "instruction": {
      "type": "string",
      "maxLength": 2000
    }
  }
}
```

### op_voice_infer

Execute IndieLogs voice.infer operation.

Operation: `voice.infer`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_voice_suggestions_list

Execute IndieLogs voice.suggestions.list operation.

Operation: `voice.suggestions.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_voice_suggestions_decide

Execute IndieLogs voice.suggestions.decide operation.

Operation: `voice.suggestions.decide`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "decision": {
      "type": "string",
      "enum": [
        "accept",
        "dismiss"
      ]
    }
  },
  "required": [
    "id",
    "decision"
  ]
}
```

### op_voice_import

Execute IndieLogs voice.import operation.

Operation: `voice.import`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "input": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "source": {
              "type": "string",
              "const": "url"
            },
            "url": {
              "type": "string",
              "format": "uri"
            }
          },
          "required": [
            "source",
            "url"
          ],
          "additionalProperties": {}
        },
        {
          "type": "object",
          "properties": {
            "source": {
              "type": "string",
              "enum": [
                "x",
                "linkedin"
              ]
            },
            "url": {
              "type": "string",
              "format": "uri"
            }
          },
          "required": [
            "source"
          ],
          "additionalProperties": {}
        }
      ]
    }
  },
  "required": [
    "input"
  ]
}
```

### op_voice_examples_list

Execute IndieLogs voice.examples.list operation.

Operation: `voice.examples.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_voice_examples_create

Execute IndieLogs voice.examples.create operation.

Operation: `voice.examples.create`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10000
    },
    "source": {
      "type": "string",
      "maxLength": 80
    },
    "weight": {
      "type": "string",
      "maxLength": 40
    },
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "text"
  ]
}
```

### op_voice_examples_update

Execute IndieLogs voice.examples.update operation.

Operation: `voice.examples.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "text": {
      "type": "string",
      "maxLength": 10000
    },
    "weight": {
      "type": "string",
      "maxLength": 40
    }
  },
  "required": [
    "id"
  ]
}
```

### op_voice_examples_delete

Execute IndieLogs voice.examples.delete operation.

Operation: `voice.examples.delete`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_notifications_list

Execute IndieLogs notifications.list operation.

Operation: `notifications.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_notifications_read

Execute IndieLogs notifications.read operation.

Operation: `notifications.read`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  }
}
```

### op_notification_preferences_read

Execute IndieLogs notification-preferences.read operation.

Operation: `notification-preferences.read`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_notification_preferences_update

Execute IndieLogs notification-preferences.update operation.

Operation: `notification-preferences.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "in_app": {
      "type": "boolean"
    },
    "email_digest": {
      "type": "boolean"
    },
    "product_updates": {
      "type": "boolean"
    },
    "kinds": {
      "type": "object",
      "properties": {
        "draft_held": {
          "type": "object",
          "properties": {
            "in_app": {
              "type": "boolean"
            },
            "email": {
              "type": "boolean"
            }
          }
        },
        "press_soon": {
          "type": "object",
          "properties": {
            "in_app": {
              "type": "boolean"
            },
            "email": {
              "type": "boolean"
            }
          }
        },
        "published": {
          "type": "object",
          "properties": {
            "in_app": {
              "type": "boolean"
            },
            "email": {
              "type": "boolean"
            }
          }
        },
        "weekly_edition_sent": {
          "type": "object",
          "properties": {
            "in_app": {
              "type": "boolean"
            },
            "email": {
              "type": "boolean"
            }
          }
        },
        "new_follower": {
          "type": "object",
          "properties": {
            "in_app": {
              "type": "boolean"
            },
            "email": {
              "type": "boolean"
            }
          }
        },
        "cheers_digest": {
          "type": "object",
          "properties": {
            "in_app": {
              "type": "boolean"
            },
            "email": {
              "type": "boolean"
            }
          }
        },
        "payment_failed": {
          "type": "object",
          "properties": {
            "in_app": {
              "type": "boolean"
            },
            "email": {
              "type": "boolean"
            }
          }
        },
        "update_reply": {
          "type": "object",
          "properties": {
            "in_app": {
              "type": "boolean"
            },
            "email": {
              "type": "boolean"
            }
          }
        }
      }
    }
  }
}
```

### op_account_export

Execute IndieLogs account.export operation.

Operation: `account.export`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_settings_read

Execute IndieLogs settings.read operation.

Operation: `settings.read`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_settings_update

Execute IndieLogs settings.update operation.

Operation: `settings.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9]{1,20}$"
    },
    "full_name": {
      "type": "string",
      "maxLength": 80
    },
    "description": {
      "type": "string",
      "maxLength": 80
    },
    "website": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "maxLength": 2048,
          "format": "uri"
        }
      ]
    },
    "avatar_url": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "string",
              "const": ""
            },
            {
              "type": "string",
              "maxLength": 2048,
              "format": "uri"
            }
          ]
        },
        {
          "type": "string",
          "pattern": "^uploads\\/[a-zA-Z0-9/-]+\\.(?:webp|png|jpg|jpeg)$"
        }
      ]
    },
    "onboarding": {
      "type": "string",
      "enum": [
        "completed"
      ]
    },
    "socials": {
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "maxLength": 30
          },
          "link": {
            "anyOf": [
              {
                "type": "string",
                "const": ""
              },
              {
                "type": "string",
                "maxLength": 2048,
                "format": "uri"
              }
            ]
          }
        },
        "required": [
          "label",
          "link"
        ]
      }
    },
    "timezone": {
      "type": "string",
      "maxLength": 100
    },
    "theme": {
      "type": "string",
      "enum": [
        "indielogs",
        "classic",
        "chainvision",
        "imagenmia",
        "light",
        "dark",
        "cupcake",
        "bumblebee",
        "emerald",
        "corporate",
        "synthwave",
        "retro",
        "cyberpunk",
        "valentine",
        "halloween",
        "garden",
        "forest",
        "aqua",
        "lofi",
        "pastel",
        "fantasy",
        "wireframe",
        "black",
        "luxury",
        "dracula",
        "cmyk",
        "autumn",
        "business",
        "acid",
        "lemonade",
        "night",
        "coffee",
        "winter",
        "sunset",
        "dim",
        "nord"
      ]
    }
  }
}
```

### list_tokens

List your agent tokens without secrets.

Operation: `tokens.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### create_token

Create a scoped revocable token.

Operation: `tokens.create`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "scopes": {
      "maxItems": 13,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "projects:read",
          "updates:read",
          "drafts:write",
          "updates:publish",
          "tokens:manage",
          "projects:write",
          "sources:read",
          "sources:write",
          "voice:read",
          "voice:write",
          "account:read",
          "account:write",
          "account:export"
        ]
      }
    },
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "startup_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "ttl_days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 365
    }
  }
}
```

### revoke_token

Revoke an owned token.

Operation: `tokens.revoke`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}
```

### op_follows_list

Execute IndieLogs follows.list operation.

Operation: `follows.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_follows_create

Execute IndieLogs follows.create operation.

Operation: `follows.create`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "target_type": {
      "type": "string",
      "enum": [
        "user",
        "project"
      ]
    },
    "target_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "target_type",
    "target_id"
  ]
}
```

### op_follows_delete

Execute IndieLogs follows.delete operation.

Operation: `follows.delete`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "target_type": {
      "type": "string",
      "enum": [
        "user",
        "project"
      ]
    },
    "target_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "target_type",
    "target_id"
  ]
}
```

### op_sources_commits_list

Execute IndieLogs sources.commits.list operation.

Operation: `sources.commits.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_groups_list

Execute IndieLogs sources.groups.list operation.

Operation: `sources.groups.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_webhook_status

Execute IndieLogs sources.webhook-status operation.

Operation: `sources.webhook-status`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_list

Execute IndieLogs sources.list operation.

Operation: `sources.list`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_sources_disconnect

Execute IndieLogs sources.disconnect operation.

Operation: `sources.disconnect`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "enum": [
        "github",
        "x",
        "linkedin"
      ]
    }
  },
  "required": [
    "provider"
  ]
}
```

### op_sources_update

Execute IndieLogs sources.update operation.

Operation: `sources.update`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "policy": {
      "type": "string",
      "enum": [
        "review",
        "veto",
        "auto"
      ]
    },
    "veto_minutes": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10080
    },
    "press_time": {
      "type": "string",
      "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"
    },
    "max_per_day": {
      "type": "number",
      "const": 1
    },
    "quiet_minutes": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1440
    },
    "hold_customer_mentions": {
      "type": "boolean"
    },
    "weekly_edition": {
      "type": "boolean"
    },
    "edition_day": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7
    },
    "edition_time": {
      "type": "string",
      "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"
    },
    "skip_kinds": {
      "maxItems": 30,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 40
      }
    },
    "notes_globs": {
      "maxItems": 30,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 300
      }
    },
    "screenshot_urls": {
      "maxItems": 10,
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "const": ""
          },
          {
            "type": "string",
            "maxLength": 2048,
            "format": "uri"
          }
        ]
      }
    },
    "outputs": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "string",
            "enum": [
              "exact",
              "range",
              "milestones",
              "off"
            ]
          }
        ]
      }
    },
    "timezone": {
      "type": "string",
      "maxLength": 100
    },
    "enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_link

Execute IndieLogs sources.link operation.

Operation: `sources.link`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "repository": {
      "type": "string",
      "minLength": 1,
      "maxLength": 300
    },
    "installation_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "repository_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_github_configure

Execute IndieLogs sources.github.configure operation.

Operation: `sources.github.configure`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "branch": {
      "type": "string",
      "maxLength": 200
    },
    "excluded_paths": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 300
      }
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_github_repositories

Execute IndieLogs sources.github.repositories operation.

Operation: `sources.github.repositories`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {}
}
```

### op_sources_github_unlink

Execute IndieLogs sources.github.unlink operation.

Operation: `sources.github.unlink`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_capture

Execute IndieLogs sources.capture operation.

Operation: `sources.capture`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "url": {
      "type": "string",
      "format": "uri"
    },
    "register_only": {
      "type": "boolean"
    }
  },
  "required": [
    "project_id",
    "url"
  ]
}
```

### op_sources_revenue_settings

Execute IndieLogs sources.revenue-settings operation.

Operation: `sources.revenue-settings`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "display": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "string",
          "enum": [
            "exact",
            "range",
            "milestones",
            "off"
          ]
        }
      ]
    }
  },
  "required": [
    "project_id",
    "display"
  ]
}
```

### op_sources_revenue_status

Execute IndieLogs sources.revenue-status operation.

Operation: `sources.revenue-status`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_revenue_disconnect

Execute IndieLogs sources.revenue-disconnect operation.

Operation: `sources.revenue-disconnect`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```

### op_sources_revenue_refresh

Execute IndieLogs sources.revenue-refresh operation.

Operation: `sources.revenue-refresh`

Input schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "project_id"
  ]
}
```