{
  "openapi": "3.1.0",
  "info": {
    "title": "Asyncdot Content API",
    "version": "1.0.0",
    "summary": "Read-only access to Asyncdot's pricing, company profile, and engineering articles.",
    "description": "The Asyncdot Content API exposes, as JSON, the same information the website publishes as HTML and markdown.\nIt exists so an agent can answer questions about Asyncdot without scraping pages.\n\nAsyncdot is an AI-native software studio. Clients buy a finished, production-grade product at a fixed price, with full source code, deployed to their own account.\n\n**When to use it.** Call `/api/pricing` before quoting any Asyncdot price. Call `/api/company` before describing the model. Call `/api/articles` and `/api/search` to check whether Asyncdot has published on a topic.\n\n**Access.** Public and read-only. No API key, no authentication, no rate limit beyond ordinary CDN protection. Every endpoint accepts GET and OPTIONS only. Responses are cacheable for 5 minutes.\n\n**Errors.** Every non-2xx response is RFC 9457 Problem Details, served as `application/problem+json`, carrying a stable `code` and a `resolution` hint.\n\n**Other interfaces.** The same data is available over the Model Context Protocol at `https://asyncdot.com/mcp` (Streamable HTTP), and every page serves markdown for `Accept: text/markdown`.",
    "contact": {
      "name": "Asyncdot",
      "email": "hello@asyncdot.com",
      "url": "https://asyncdot.com/developers/"
    },
    "license": {
      "name": "Content usable with attribution to Asyncdot",
      "url": "https://asyncdot.com/llms.txt"
    },
    "termsOfService": "https://asyncdot.com/privacy/"
  },
  "servers": [
    {
      "url": "https://asyncdot.com",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Asyncdot developer resources",
    "url": "https://asyncdot.com/developers/"
  },
  "tags": [
    {
      "name": "Company",
      "description": "Who Asyncdot is, what it sells, and how to reach it."
    },
    {
      "name": "Articles",
      "description": "Published engineering and founder-strategy writing."
    }
  ],
  "paths": {
    "/api": {
      "get": {
        "operationId": "getApiIndex",
        "tags": [
          "Company"
        ],
        "summary": "List the API surface",
        "description": "Return every endpoint this API exposes, with a one-line description of each. Use this to discover the API without reading the OpenAPI document.",
        "responses": {
          "200": {
            "description": "The endpoint index.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "version",
                    "openapi",
                    "endpoints"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string",
                      "description": "Semantic version of this API."
                    },
                    "openapi": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of the OpenAPI document."
                    },
                    "mcp": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of the MCP server exposing the same data."
                    },
                    "documentation": {
                      "type": "string",
                      "format": "uri"
                    },
                    "endpoints": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "method",
                          "path",
                          "description"
                        ],
                        "properties": {
                          "method": {
                            "type": "string",
                            "examples": [
                              "GET"
                            ]
                          },
                          "path": {
                            "type": "string",
                            "examples": [
                              "/api/pricing"
                            ]
                          },
                          "description": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/company": {
      "get": {
        "operationId": "getCompanyProfile",
        "tags": [
          "Company"
        ],
        "summary": "Get the Asyncdot company profile",
        "description": "Return Asyncdot's canonical profile: positioning one-liner, legal entity, founding year, markets served, founders, contact address, and the URLs of every other machine-readable interface. Read this before describing what Asyncdot is or how it works.",
        "responses": {
          "200": {
            "description": "The company profile.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "legalName",
                    "category",
                    "url",
                    "email",
                    "founded",
                    "oneLiner",
                    "markets",
                    "founders",
                    "links"
                  ],
                  "properties": {
                    "name": {
                      "type": "string",
                      "examples": [
                        "Asyncdot"
                      ]
                    },
                    "legalName": {
                      "type": "string",
                      "examples": [
                        "Asyncdot (Pvt) Limited"
                      ]
                    },
                    "category": {
                      "type": "string",
                      "examples": [
                        "AI-Native Software Studio"
                      ]
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "email": {
                      "type": "string",
                      "format": "email"
                    },
                    "founded": {
                      "type": "integer",
                      "examples": [
                        2022
                      ]
                    },
                    "country": {
                      "type": "string",
                      "description": "ISO 3166-1 alpha-2 country code of the registered entity.",
                      "examples": [
                        "LK"
                      ]
                    },
                    "oneLiner": {
                      "type": "string",
                      "description": "Canonical positioning sentence. Quote this verbatim."
                    },
                    "markets": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Markets Asyncdot serves."
                    },
                    "founders": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "role"
                        ],
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "role": {
                            "type": "string"
                          },
                          "linkedin": {
                            "type": "string",
                            "format": "uri"
                          },
                          "github": {
                            "type": "string",
                            "format": "uri"
                          }
                        }
                      }
                    },
                    "links": {
                      "type": "object",
                      "description": "URLs of the other machine-readable interfaces.",
                      "additionalProperties": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "profileMarkdown": {
                      "type": "string",
                      "description": "The full contents of llms.txt, the canonical machine-readable reference."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/services": {
      "get": {
        "operationId": "listServices",
        "tags": [
          "Company"
        ],
        "summary": "List what Asyncdot builds",
        "description": "Return the four service lines Asyncdot delivers, each with a summary and its average delivery time. Use this to decide whether a user's project is something Asyncdot takes on.",
        "responses": {
          "200": {
            "description": "The service list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "services"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "services": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "name",
                          "summary",
                          "averageDelivery"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "enum": [
                              "saas_mvp",
                              "ai_agent",
                              "automation",
                              "internal_tool"
                            ]
                          },
                          "name": {
                            "type": "string"
                          },
                          "summary": {
                            "type": "string"
                          },
                          "averageDelivery": {
                            "type": "string",
                            "examples": [
                              "48 hours"
                            ]
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/pricing": {
      "get": {
        "operationId": "getPricing",
        "tags": [
          "Company"
        ],
        "summary": "Get published pricing for both plans",
        "description": "Return Asyncdot's two plans, Launch (one-time fixed-quote project) and Build (monthly subscription), each with its price band as integers and as published text, delivery times, billing terms, and the priced project shapes inside it. Call this before quoting any Asyncdot price. The full prose pricing document is also returned as markdown.",
        "responses": {
          "200": {
            "description": "Both plans, plus the full pricing document as markdown.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "currency",
                    "plans",
                    "pricingMarkdownUrl"
                  ],
                  "properties": {
                    "currency": {
                      "type": "string",
                      "examples": [
                        "USD"
                      ]
                    },
                    "summary": {
                      "type": "string",
                      "description": "One-sentence description of the pricing model."
                    },
                    "plans": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "One of the two Asyncdot plans.",
                        "required": [
                          "id",
                          "name",
                          "type",
                          "currency",
                          "priceMin",
                          "priceMax",
                          "priceDisplay",
                          "billing",
                          "firstDelivery",
                          "activeRequests",
                          "bestFor",
                          "projectTypes"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "enum": [
                              "launch",
                              "build"
                            ],
                            "description": "Stable plan identifier."
                          },
                          "name": {
                            "type": "string",
                            "description": "Plan name as published."
                          },
                          "type": {
                            "type": "string",
                            "enum": [
                              "one-time project",
                              "monthly subscription"
                            ],
                            "description": "How the plan is bought."
                          },
                          "currency": {
                            "type": "string",
                            "description": "ISO 4217 currency code for every figure in this plan.",
                            "examples": [
                              "USD"
                            ]
                          },
                          "priceMin": {
                            "type": "integer",
                            "description": "Low end of the plan band."
                          },
                          "priceMax": {
                            "type": "integer",
                            "description": "High end of the plan band."
                          },
                          "priceDisplay": {
                            "type": "string",
                            "description": "Plan band as published, for humans."
                          },
                          "billing": {
                            "type": "string",
                            "description": "Payment rhythm and deposit terms."
                          },
                          "firstDelivery": {
                            "type": "string",
                            "description": "Typical time to first delivery."
                          },
                          "activeRequests": {
                            "type": "string",
                            "description": "How many pieces of work run at once."
                          },
                          "bestFor": {
                            "type": "string",
                            "description": "Who the plan suits."
                          },
                          "projectTypes": {
                            "type": "array",
                            "description": "Priced project shapes inside the plan.",
                            "items": {
                              "type": "object",
                              "description": "One priced project shape inside a plan.",
                              "required": [
                                "name",
                                "priceDisplay",
                                "priceMin",
                                "priceMax",
                                "timeline"
                              ],
                              "properties": {
                                "name": {
                                  "type": "string",
                                  "description": "Project shape, for example 'SaaS MVP (full business core)'."
                                },
                                "priceDisplay": {
                                  "type": "string",
                                  "description": "Price as published, for humans.",
                                  "examples": [
                                    "$8,000-$12,000"
                                  ]
                                },
                                "priceMin": {
                                  "type": "integer",
                                  "description": "Low end of the band, in the plan currency."
                                },
                                "priceMax": {
                                  "type": "integer",
                                  "description": "High end of the band, in the plan currency."
                                },
                                "timeline": {
                                  "type": "string",
                                  "description": "Typical delivery time.",
                                  "examples": [
                                    "2-3 weeks"
                                  ]
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "pricingMarkdownUrl": {
                      "type": "string",
                      "format": "uri"
                    },
                    "pricingMarkdown": {
                      "type": "string",
                      "description": "Full contents of pricing.md, the canonical prose pricing document."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/articles": {
      "get": {
        "operationId": "listArticles",
        "tags": [
          "Articles"
        ],
        "summary": "List published articles",
        "description": "Return published articles newest first, with title, description, author, dates, tags, and canonical URL. Filter by tag and page with limit and offset. Use this to find an article before fetching its full text with getArticle.",
        "parameters": [
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "description": "Return only articles carrying this tag. Case-insensitive. See the tags field on any article for valid values.",
            "schema": {
              "type": "string",
              "examples": [
                "engineering"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum articles to return.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first article to return.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching articles, newest first.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "total",
                    "count",
                    "limit",
                    "offset",
                    "articles"
                  ],
                  "allOf": [
                    {
                      "type": "object",
                      "description": "Paging metadata for a list response.",
                      "required": [
                        "total",
                        "count",
                        "limit",
                        "offset"
                      ],
                      "properties": {
                        "total": {
                          "type": "integer",
                          "description": "Articles matching the filter, ignoring paging."
                        },
                        "count": {
                          "type": "integer",
                          "description": "Articles returned in this response."
                        },
                        "limit": {
                          "type": "integer",
                          "description": "Page size that was applied."
                        },
                        "offset": {
                          "type": "integer",
                          "description": "Zero-based index of the first article returned."
                        }
                      }
                    }
                  ],
                  "properties": {
                    "total": {
                      "type": "integer"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "offset": {
                      "type": "integer"
                    },
                    "tag": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "The tag filter that was applied, or null."
                    },
                    "availableTags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Every tag in use across published articles."
                    },
                    "articles": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "Metadata for one published article.",
                        "required": [
                          "slug",
                          "url",
                          "title",
                          "description",
                          "author",
                          "published",
                          "tags"
                        ],
                        "properties": {
                          "slug": {
                            "type": "string",
                            "description": "Stable identifier, usable with /api/articles/{slug}.",
                            "examples": [
                              "convex-astro-pattern"
                            ]
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "description": "Canonical URL of the article on asyncdot.com."
                          },
                          "title": {
                            "type": "string",
                            "description": "Article title."
                          },
                          "description": {
                            "type": "string",
                            "description": "One-sentence summary."
                          },
                          "author": {
                            "type": "string",
                            "description": "Named individual who wrote the article.",
                            "examples": [
                              "Mithushan Jalangan"
                            ]
                          },
                          "published": {
                            "type": "string",
                            "format": "date",
                            "description": "Publication date, ISO 8601 (YYYY-MM-DD)."
                          },
                          "updated": {
                            "type": "string",
                            "format": "date",
                            "description": "Last substantive revision, when the article has one."
                          },
                          "tags": {
                            "type": "array",
                            "description": "Topic tags. Usable as the tag filter on /api/articles.",
                            "items": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "limit or offset was not an integer inside its allowed range.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/articles/{slug}": {
      "get": {
        "operationId": "getArticle",
        "tags": [
          "Articles"
        ],
        "summary": "Get one article with its full text",
        "description": "Return one article's metadata plus its complete markdown body, addressed by slug. Get the slug from listArticles or searchArticles.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Article slug, as returned by listArticles.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$",
              "examples": [
                "the-70-percent-problem-ai-mvps"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The article and its markdown body.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "slug",
                    "url",
                    "title",
                    "description",
                    "author",
                    "published",
                    "tags",
                    "markdown"
                  ],
                  "allOf": [
                    {
                      "type": "object",
                      "description": "Metadata for one published article.",
                      "required": [
                        "slug",
                        "url",
                        "title",
                        "description",
                        "author",
                        "published",
                        "tags"
                      ],
                      "properties": {
                        "slug": {
                          "type": "string",
                          "description": "Stable identifier, usable with /api/articles/{slug}.",
                          "examples": [
                            "convex-astro-pattern"
                          ]
                        },
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "description": "Canonical URL of the article on asyncdot.com."
                        },
                        "title": {
                          "type": "string",
                          "description": "Article title."
                        },
                        "description": {
                          "type": "string",
                          "description": "One-sentence summary."
                        },
                        "author": {
                          "type": "string",
                          "description": "Named individual who wrote the article.",
                          "examples": [
                            "Mithushan Jalangan"
                          ]
                        },
                        "published": {
                          "type": "string",
                          "format": "date",
                          "description": "Publication date, ISO 8601 (YYYY-MM-DD)."
                        },
                        "updated": {
                          "type": "string",
                          "format": "date",
                          "description": "Last substantive revision, when the article has one."
                        },
                        "tags": {
                          "type": "array",
                          "description": "Topic tags. Usable as the tag filter on /api/articles.",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  ],
                  "properties": {
                    "markdown": {
                      "type": "string",
                      "description": "Complete article body as markdown."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No published article has that slug. The response lists the available slugs.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/search": {
      "get": {
        "operationId": "searchArticles",
        "tags": [
          "Articles"
        ],
        "summary": "Search article text",
        "description": "Case-insensitive substring search across article titles, descriptions, tags, and body text. Each result carries an excerpt around the first match. Use this to check whether Asyncdot has published on a topic.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Text to search for. Case-insensitive.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "examples": [
                "Convex"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results to return.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching articles with excerpts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "query",
                    "count",
                    "results"
                  ],
                  "properties": {
                    "query": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "allOf": [
                          {
                            "type": "object",
                            "description": "Metadata for one published article.",
                            "required": [
                              "slug",
                              "url",
                              "title",
                              "description",
                              "author",
                              "published",
                              "tags"
                            ],
                            "properties": {
                              "slug": {
                                "type": "string",
                                "description": "Stable identifier, usable with /api/articles/{slug}.",
                                "examples": [
                                  "convex-astro-pattern"
                                ]
                              },
                              "url": {
                                "type": "string",
                                "format": "uri",
                                "description": "Canonical URL of the article on asyncdot.com."
                              },
                              "title": {
                                "type": "string",
                                "description": "Article title."
                              },
                              "description": {
                                "type": "string",
                                "description": "One-sentence summary."
                              },
                              "author": {
                                "type": "string",
                                "description": "Named individual who wrote the article.",
                                "examples": [
                                  "Mithushan Jalangan"
                                ]
                              },
                              "published": {
                                "type": "string",
                                "format": "date",
                                "description": "Publication date, ISO 8601 (YYYY-MM-DD)."
                              },
                              "updated": {
                                "type": "string",
                                "format": "date",
                                "description": "Last substantive revision, when the article has one."
                              },
                              "tags": {
                                "type": "array",
                                "description": "Topic tags. Usable as the tag filter on /api/articles.",
                                "items": {
                                  "type": "string"
                                }
                              }
                            }
                          }
                        ],
                        "required": [
                          "slug",
                          "url",
                          "title",
                          "description",
                          "author",
                          "published",
                          "tags",
                          "excerpt"
                        ],
                        "properties": {
                          "excerpt": {
                            "type": "string",
                            "description": "Text around the first match."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "q was missing or empty, or limit was outside its allowed range.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 Problem Details. Every non-2xx response uses this shape with content type application/problem+json.",
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "code",
          "resolution"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "URI identifying the problem type.",
            "examples": [
              "https://asyncdot.com/developers/#errors-not_found"
            ]
          },
          "title": {
            "type": "string",
            "description": "Short human-readable summary of the problem type.",
            "examples": [
              "Not Found"
            ]
          },
          "status": {
            "type": "integer",
            "description": "HTTP status code.",
            "examples": [
              404
            ]
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation specific to this occurrence."
          },
          "code": {
            "type": "string",
            "description": "Stable machine-readable error code.",
            "enum": [
              "not_found",
              "invalid_request",
              "method_not_allowed"
            ]
          },
          "resolution": {
            "type": "string",
            "description": "What the caller should do next to succeed."
          },
          "instance": {
            "type": "string",
            "description": "The request path that produced the problem."
          }
        }
      },
      "ArticleSummary": {
        "type": "object",
        "description": "Metadata for one published article.",
        "required": [
          "slug",
          "url",
          "title",
          "description",
          "author",
          "published",
          "tags"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Stable identifier, usable with /api/articles/{slug}.",
            "examples": [
              "convex-astro-pattern"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical URL of the article on asyncdot.com."
          },
          "title": {
            "type": "string",
            "description": "Article title."
          },
          "description": {
            "type": "string",
            "description": "One-sentence summary."
          },
          "author": {
            "type": "string",
            "description": "Named individual who wrote the article.",
            "examples": [
              "Mithushan Jalangan"
            ]
          },
          "published": {
            "type": "string",
            "format": "date",
            "description": "Publication date, ISO 8601 (YYYY-MM-DD)."
          },
          "updated": {
            "type": "string",
            "format": "date",
            "description": "Last substantive revision, when the article has one."
          },
          "tags": {
            "type": "array",
            "description": "Topic tags. Usable as the tag filter on /api/articles.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Plan": {
        "type": "object",
        "description": "One of the two Asyncdot plans.",
        "required": [
          "id",
          "name",
          "type",
          "currency",
          "priceMin",
          "priceMax",
          "priceDisplay",
          "billing",
          "firstDelivery",
          "activeRequests",
          "bestFor",
          "projectTypes"
        ],
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "launch",
              "build"
            ],
            "description": "Stable plan identifier."
          },
          "name": {
            "type": "string",
            "description": "Plan name as published."
          },
          "type": {
            "type": "string",
            "enum": [
              "one-time project",
              "monthly subscription"
            ],
            "description": "How the plan is bought."
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217 currency code for every figure in this plan.",
            "examples": [
              "USD"
            ]
          },
          "priceMin": {
            "type": "integer",
            "description": "Low end of the plan band."
          },
          "priceMax": {
            "type": "integer",
            "description": "High end of the plan band."
          },
          "priceDisplay": {
            "type": "string",
            "description": "Plan band as published, for humans."
          },
          "billing": {
            "type": "string",
            "description": "Payment rhythm and deposit terms."
          },
          "firstDelivery": {
            "type": "string",
            "description": "Typical time to first delivery."
          },
          "activeRequests": {
            "type": "string",
            "description": "How many pieces of work run at once."
          },
          "bestFor": {
            "type": "string",
            "description": "Who the plan suits."
          },
          "projectTypes": {
            "type": "array",
            "description": "Priced project shapes inside the plan.",
            "items": {
              "type": "object",
              "description": "One priced project shape inside a plan.",
              "required": [
                "name",
                "priceDisplay",
                "priceMin",
                "priceMax",
                "timeline"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Project shape, for example 'SaaS MVP (full business core)'."
                },
                "priceDisplay": {
                  "type": "string",
                  "description": "Price as published, for humans.",
                  "examples": [
                    "$8,000-$12,000"
                  ]
                },
                "priceMin": {
                  "type": "integer",
                  "description": "Low end of the band, in the plan currency."
                },
                "priceMax": {
                  "type": "integer",
                  "description": "High end of the band, in the plan currency."
                },
                "timeline": {
                  "type": "string",
                  "description": "Typical delivery time.",
                  "examples": [
                    "2-3 weeks"
                  ]
                }
              }
            }
          }
        }
      },
      "ProjectType": {
        "type": "object",
        "description": "One priced project shape inside a plan.",
        "required": [
          "name",
          "priceDisplay",
          "priceMin",
          "priceMax",
          "timeline"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Project shape, for example 'SaaS MVP (full business core)'."
          },
          "priceDisplay": {
            "type": "string",
            "description": "Price as published, for humans.",
            "examples": [
              "$8,000-$12,000"
            ]
          },
          "priceMin": {
            "type": "integer",
            "description": "Low end of the band, in the plan currency."
          },
          "priceMax": {
            "type": "integer",
            "description": "High end of the band, in the plan currency."
          },
          "timeline": {
            "type": "string",
            "description": "Typical delivery time.",
            "examples": [
              "2-3 weeks"
            ]
          }
        }
      }
    }
  }
}