{
  "openapi": "3.0.3",
  "info": {
    "title": "ROBRION API",
    "version": "0.1.0",
    "description": "Modular monolith Rust (Axum). Single binary serves API + SSR frontend. License API ported from robrion.net (Ed25519 + legacy JWT)."
  },
  "servers": [
    {
      "url": "/api/v1"
    }
  ],
  "tags": [
    {
      "name": "health"
    },
    {
      "name": "catalog"
    },
    {
      "name": "auth"
    },
    {
      "name": "commerce"
    },
    {
      "name": "admin"
    },
    {
      "name": "webhooks"
    },
    {
      "name": "licenses"
    }
  ],
  "paths": {
    "/health/live": {
      "get": {
        "tags": [
          "health"
        ],
        "responses": {
          "200": {
            "description": "liveness"
          }
        }
      }
    },
    "/health/ready": {
      "get": {
        "tags": [
          "health"
        ],
        "responses": {
          "200": {
            "description": "readiness + store counts"
          }
        }
      }
    },
    "/api/v1/openapi.json": {
      "get": {
        "tags": [
          "health"
        ],
        "responses": {
          "200": {
            "description": "this document"
          }
        }
      }
    },
    "/api/v1/catalog/products": {
      "get": {
        "tags": [
          "catalog"
        ],
        "responses": {
          "200": {
            "description": "product registry (KEISEI, RECEH, AKINAI, KHANSI)"
          }
        }
      }
    },
    "/api/v1/catalog/products/{key}": {
      "get": {
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "keisei",
                "receh",
                "akinai",
                "khansi"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "product + plans"
          },
          "404": {
            "description": "not found"
          }
        }
      }
    },
    "/api/v1/catalog/plans": {
      "get": {
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "product",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "plans"
          }
        }
      }
    },
    "/api/v1/auth/register": {
      "post": {
        "tags": [
          "auth"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email",
                  "name",
                  "password",
                  "org_name"
                ],
                "properties": {
                  "email": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string",
                    "minLength": 8
                  },
                  "org_name": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "responses": {
            "201": {
              "description": "created"
            },
            "409": {
              "description": "email already registered"
            }
          }
        }
      }
    },
    "/api/v1/auth/login": {
      "post": {
        "tags": [
          "auth"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "email",
                  "password"
                ],
                "properties": {
                  "email": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "session token + HttpOnly cookie"
            },
            "403": {
              "description": "invalid credentials"
            }
          }
        }
      }
    },
    "/api/v1/auth/logout": {
      "post": {
        "tags": [
          "auth"
        ],
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/api/v1/me": {
      "get": {
        "tags": [
          "auth"
        ],
        "responses": {
          "200": {
            "description": "current user + organizations"
          },
          "401": {
            "description": "unauthorized"
          }
        }
      }
    },
    "/api/v1/organizations": {
      "get": {
        "tags": [
          "auth"
        ],
        "responses": {
          "200": {
            "description": "my organizations"
          }
        }
      }
    },
    "/api/v1/orders": {
      "post": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "org_id",
                  "items"
                ],
                "properties": {
                  "org_id": {
                    "type": "string"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "plan_id",
                        "qty"
                      ],
                      "properties": {
                        "plan_id": {
                          "type": "string"
                        },
                        "qty": {
                          "type": "integer",
                          "minimum": 1
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "responses": {
            "201": {
              "description": "order created (idempotent per key)"
            }
          }
        }
      },
      "get": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "my tenant orders"
          }
        }
      }
    },
    "/api/v1/orders/{id}/pay": {
      "post": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "paid: order + invoice + licenses + subscriptions"
          }
        }
      }
    },
    "/api/v1/subscriptions": {
      "get": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "subscriptions"
          }
        }
      }
    },
    "/api/v1/invoices": {
      "get": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "invoices"
          }
        }
      }
    },
    "/api/v1/licenses": {
      "get": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "licenses"
          }
        }
      }
    },
    "/api/v1/licenses/{id}/activate": {
      "post": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "activation counted against seats"
          },
          "422": {
            "description": "seat limit or license not active"
          }
        }
      }
    },
    "/api/v1/support/tickets": {
      "post": {
        "tags": [
          "commerce"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "org_id",
                  "subject",
                  "message"
                ],
                "properties": {
                  "org_id": {
                    "type": "string"
                  },
                  "subject": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "responses": {
            "201": {
              "description": "ticket created"
            }
          }
        }
      },
      "get": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "tickets"
          }
        }
      }
    },
    "/api/v1/leads": {
      "post": {
        "tags": [
          "catalog"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "email",
                  "message"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "lead recorded"
            }
          }
        }
      }
    },
    "/api/v1/products/{key}/adapter": {
      "get": {
        "tags": [
          "commerce"
        ],
        "parameters": [
          {
            "name": "X-Org-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "capabilities + entitlement for this tenant"
          }
        }
      }
    },
    "/api/v1/admin/overview": {
      "get": {
        "tags": [
          "admin"
        ],
        "responses": {
          "200": {
            "description": "real counts from store"
          },
          "403": {
            "description": "admin only"
          }
        }
      }
    },
    "/api/v1/admin/audit": {
      "get": {
        "tags": [
          "admin"
        ],
        "responses": {
          "200": {
            "description": "last 100 audit events"
          }
        }
      }
    },
    "/api/v1/admin/customers": {
      "get": {
        "tags": [
          "admin"
        ],
        "responses": {
          "200": {
            "description": "organizations"
          }
        }
      }
    },
    "/api/v1/admin/products/{key}/status": {
      "post": {
        "tags": [
          "admin"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "draft",
                      "published",
                      "retired"
                    ]
                  }
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "status updated + audited"
            }
          }
        }
      }
    },
    "/api/v1/webhooks/{provider}": {
      "post": {
        "tags": [
          "webhooks"
        ],
        "parameters": [
          {
            "name": "X-Signature",
            "in": "header",
            "schema": {
              "type": "string",
              "description": "hex HMAC-SHA256(secret, raw body) \u2014 required for receh when RECEH_WEBHOOK_SECRET is set"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "event_id"
                ],
                "properties": {
                  "event_id": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "responses": {
            "200": {
              "description": "accepted; duplicate=true when event_id was already seen"
            },
            "401": {
              "description": "invalid signature"
            }
          }
        }
      }
    },
    "/api/admin/licenses": {
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "product",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "all licenses (admin)"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/license/activations": {
      "delete": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "activationId": {
                    "type": "string"
                  },
                  "fingerprint": {
                    "type": "string"
                  },
                  "licenseId": {
                    "type": "string"
                  }
                },
                "required": [
                  "licenseId"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "ok"
          }
        },
        "tags": [
          "licenses"
        ]
      },
      "get": {
        "parameters": [
          {
            "in": "query",
            "name": "licenseId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "activations of my license"
          },
          "403": {
            "description": "not yours"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/license/heartbeat": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fingerprint": {
                    "type": "string"
                  },
                  "installId": {
                    "type": "string"
                  },
                  "key": {
                    "type": "string"
                  },
                  "signals": {
                    "type": "object"
                  }
                },
                "required": [
                  "key"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "ok + status + expires"
          },
          "403": {
            "description": "not activated / suspended"
          },
          "410": {
            "description": "expired"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/license/validate": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fingerprint": {
                    "type": "string"
                  },
                  "installId": {
                    "type": "string"
                  },
                  "key": {
                    "type": "string"
                  },
                  "productId": {
                    "type": "string"
                  },
                  "signals": {
                    "type": "object"
                  }
                },
                "required": [
                  "key",
                  "productId"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Ed25519 token 2-part, 24 jam"
          },
          "403": {
            "description": "invalid/revoked/expired"
          },
          "409": {
            "description": "device bound to another license / activation limit"
          },
          "503": {
            "description": "signing not configured"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/license/verify": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fingerprint": {
                    "type": "string"
                  },
                  "productId": {
                    "type": "string"
                  },
                  "token": {
                    "type": "string"
                  }
                },
                "required": [
                  "token",
                  "productId",
                  "fingerprint"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "valid + licenseId + expires"
          },
          "403": {
            "description": "invalid/revoked/expired (generic)"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/licenses": {
      "get": {
        "responses": {
          "200": {
            "description": "my licenses (key_hint only, never plaintext)"
          }
        },
        "tags": [
          "licenses"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "amountMinor": {
                    "type": "integer"
                  },
                  "email": {
                    "type": "string"
                  },
                  "expires": {
                    "type": "string"
                  },
                  "legacyCustomerName": {
                    "type": "string"
                  },
                  "legacyFeatures": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "legacyPlan": {
                    "type": "string"
                  },
                  "maxDevices": {
                    "default": 1,
                    "type": "integer"
                  },
                  "plan": {
                    "type": "string"
                  },
                  "productId": {
                    "type": "string"
                  }
                },
                "required": [
                  "email",
                  "productId"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "created - plaintext key returned ONCE"
          },
          "403": {
            "description": "admin only"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/licenses/activate": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "fingerprint": {
                    "type": "object"
                  },
                  "installId": {
                    "type": "string"
                  },
                  "key": {
                    "type": "string"
                  }
                },
                "required": [
                  "key",
                  "installId"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "legacy JWT 3-part + features + plan"
          },
          "401": {
            "description": "{detail: invalid_key}"
          },
          "403": {
            "description": "{detail: revoked|license_expired|max_installs_reached}"
          },
          "429": {
            "description": "rate limited"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/licenses/check": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "token": {
                    "type": "string"
                  }
                },
                "required": [
                  "token"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "{status: active|expired|revoked|license_expired}"
          },
          "401": {
            "description": "{detail: invalid_token}"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/licenses/deactivate": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "installId": {
                    "type": "string"
                  },
                  "key": {
                    "type": "string"
                  }
                },
                "required": [
                  "key",
                  "installId"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "{ok: true, install_id}"
          },
          "401": {
            "description": "{detail: invalid_key}"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/licenses/public-key": {
      "get": {
        "responses": {
          "200": {
            "description": "{kty, crv, x, pem} legacy Ed25519 public key"
          },
          "503": {
            "description": "legacy signing not configured"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    },
    "/api/licenses/{id}": {
      "patch": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "status": {
                    "enum": [
                      "active",
                      "suspended",
                      "revoked",
                      "expired"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "status"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "status updated"
          }
        },
        "tags": [
          "licenses"
        ]
      }
    }
  }
}