{
  "openapi": "3.1.0",
  "info": {
    "title": "Promenaut Website API",
    "version": "1.0.0",
    "summary": "Public endpoints of the promenaut.ai website.",
    "description": "These are the publicly reachable endpoints of the Promenaut marketing website: programmatic contact / demo requests, newsletter subscription, and gated-resource access requests. They accept JSON over HTTPS and return structured JSON, including structured JSON errors.\n\nVersioning: the current version is v1. Endpoints are canonical at the versioned path /api/v1/* and are also reachable at the unversioned /api/* alias. Every response carries an X-API-Version header. Breaking changes ship under a new version prefix (e.g. /api/v2/*); a retiring version is signalled with Deprecation and Sunset response headers at least 6 months before removal.\n\nRate limits: responses carry a RateLimit-Policy header advertising an advisory limit (60 requests / 60s) so agents can self-throttle; it is not enforced in-process, and Retry-After is returned on any 429. See https://www.promenaut.ai/api.md\n\nPromenaut is an enterprise platform delivered through engagements; the platform's agentic workforce is provisioned per customer and is not a self-serve public API. For platform or integration access, use the contact endpoint below or email hello@promenaut.ai. Developer overview: https://www.promenaut.ai/developers",
    "contact": {
      "name": "Promenaut",
      "email": "hello@promenaut.ai",
      "url": "https://www.promenaut.ai/contact"
    },
    "license": {
      "name": "Proprietary"
    }
  },
  "servers": [
    {
      "url": "https://www.promenaut.ai",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Contact",
      "description": "Reach the Promenaut team programmatically."
    },
    {
      "name": "Subscriptions",
      "description": "Newsletter subscription."
    },
    {
      "name": "Resources",
      "description": "Access requests for gated resources."
    }
  ],
  "paths": {
    "/api/v1/contact": {
      "post": {
        "operationId": "createContactRequest",
        "tags": [
          "Contact"
        ],
        "summary": "Send a contact or demo request",
        "description": "Submits a contact or demo request to the Promenaut team. Use this to reach out programmatically, for example to request a platform demo.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactRequest"
              },
              "example": {
                "firstName": "Ada",
                "lastName": "Lovelace",
                "email": "ada@example.com",
                "company": "Example Bank",
                "role": "Head of Engineering",
                "subject": "Demo request",
                "message": "We'd like to see the requirements workflow.",
                "intent": "demo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Request accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request body was invalid.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#invalid_email",
                  "title": "Invalid email format",
                  "status": 400,
                  "detail": "Provide a valid email address, for example name@company.com.",
                  "code": "invalid_email",
                  "message": "Invalid email format",
                  "hint": "Provide a valid email address, for example name@company.com.",
                  "error": "Invalid email format"
                }
              }
            }
          },
          "405": {
            "description": "The HTTP method is not supported for this endpoint.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#method_not_allowed",
                  "title": "Method not allowed",
                  "status": 405,
                  "detail": "Use POST with a JSON body and Content-Type: application/json.",
                  "code": "method_not_allowed",
                  "message": "Method not allowed",
                  "hint": "Use POST with a JSON body and Content-Type: application/json.",
                  "error": "Method not allowed"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#internal_error",
                  "title": "Internal server error",
                  "status": 500,
                  "detail": "Try again later, or email hello@promenaut.ai.",
                  "code": "internal_error",
                  "message": "Internal server error",
                  "hint": "Try again later, or email hello@promenaut.ai.",
                  "error": "Internal server error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/newsletter": {
      "post": {
        "operationId": "createNewsletterSubscription",
        "tags": [
          "Subscriptions"
        ],
        "summary": "Subscribe to the newsletter",
        "description": "Subscribes an email address to the Promenaut newsletter.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewsletterRequest"
              },
              "example": {
                "email": "ada@example.com"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Subscribed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request body was invalid.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#invalid_email",
                  "title": "Invalid email format",
                  "status": 400,
                  "detail": "Provide a valid email address, for example name@company.com.",
                  "code": "invalid_email",
                  "message": "Invalid email format",
                  "hint": "Provide a valid email address, for example name@company.com.",
                  "error": "Invalid email format"
                }
              }
            }
          },
          "405": {
            "description": "The HTTP method is not supported for this endpoint.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#method_not_allowed",
                  "title": "Method not allowed",
                  "status": 405,
                  "detail": "Use POST with a JSON body and Content-Type: application/json.",
                  "code": "method_not_allowed",
                  "message": "Method not allowed",
                  "hint": "Use POST with a JSON body and Content-Type: application/json.",
                  "error": "Method not allowed"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#internal_error",
                  "title": "Internal server error",
                  "status": 500,
                  "detail": "Try again later, or email hello@promenaut.ai.",
                  "code": "internal_error",
                  "message": "Internal server error",
                  "hint": "Try again later, or email hello@promenaut.ai.",
                  "error": "Internal server error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/request-access": {
      "post": {
        "operationId": "createResourceAccessRequest",
        "tags": [
          "Resources"
        ],
        "summary": "Request access to a gated resource",
        "description": "Requests access to a gated resource in the Promenaut resource library. The team reviews the request and, on approval, emails a magic link that grants access.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccessRequest"
              },
              "example": {
                "email": "ada@example.com",
                "firstName": "Ada",
                "lastName": "Lovelace",
                "company": "Example Bank"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Request received for review.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request body was invalid.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#invalid_email",
                  "title": "Invalid email format",
                  "status": 400,
                  "detail": "Provide a valid email address, for example name@company.com.",
                  "code": "invalid_email",
                  "message": "Invalid email format",
                  "hint": "Provide a valid email address, for example name@company.com.",
                  "error": "Invalid email format"
                }
              }
            }
          },
          "405": {
            "description": "The HTTP method is not supported for this endpoint.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#method_not_allowed",
                  "title": "Method not allowed",
                  "status": 405,
                  "detail": "Use POST with a JSON body and Content-Type: application/json.",
                  "code": "method_not_allowed",
                  "message": "Method not allowed",
                  "hint": "Use POST with a JSON body and Content-Type: application/json.",
                  "error": "Method not allowed"
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "type": "https://www.promenaut.ai/api.md#internal_error",
                  "title": "Internal server error",
                  "status": 500,
                  "detail": "Try again later, or email hello@promenaut.ai.",
                  "code": "internal_error",
                  "message": "Internal server error",
                  "hint": "Try again later, or email hello@promenaut.ai.",
                  "error": "Internal server error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ContactRequest": {
        "type": "object",
        "required": [
          "firstName",
          "lastName",
          "email"
        ],
        "additionalProperties": false,
        "properties": {
          "firstName": {
            "type": "string",
            "description": "Given name."
          },
          "lastName": {
            "type": "string",
            "description": "Family name."
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Work email address."
          },
          "company": {
            "type": "string",
            "description": "Company name."
          },
          "role": {
            "type": "string",
            "description": "Job title."
          },
          "subject": {
            "type": "string",
            "description": "Subject line."
          },
          "message": {
            "type": "string",
            "description": "Free-text message."
          },
          "intent": {
            "type": "string",
            "description": "Reason for contact, e.g. \"demo\"."
          },
          "test": {
            "type": "boolean",
            "description": "Sandbox / dry-run. When true, the request is validated but nothing is submitted (no record created, no email); the response is {success:true, sandbox:true}."
          }
        }
      },
      "NewsletterRequest": {
        "type": "object",
        "required": [
          "email"
        ],
        "additionalProperties": false,
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "Email address to subscribe."
          },
          "test": {
            "type": "boolean",
            "description": "Sandbox / dry-run. When true, the request is validated but nothing is submitted (no record created, no email); the response is {success:true, sandbox:true}."
          }
        }
      },
      "AccessRequest": {
        "type": "object",
        "required": [
          "email"
        ],
        "additionalProperties": false,
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "Work email address."
          },
          "firstName": {
            "type": "string",
            "description": "Given name."
          },
          "lastName": {
            "type": "string",
            "description": "Family name."
          },
          "company": {
            "type": "string",
            "description": "Company name."
          },
          "jobTitle": {
            "type": "string",
            "description": "Job title."
          },
          "test": {
            "type": "boolean",
            "description": "Sandbox / dry-run. When true, the request is validated but nothing is submitted (no record created, no email); the response is {success:true, sandbox:true}."
          }
        }
      },
      "SuccessResponse": {
        "type": "object",
        "required": [
          "success"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          }
        }
      },
      "ContactResponse": {
        "type": "object",
        "required": [
          "success",
          "message"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "AccessResponse": {
        "type": "object",
        "required": [
          "success",
          "message"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "type",
          "title",
          "status",
          "code",
          "message"
        ],
        "description": "RFC 9457 problem detail. `type`/`title`/`status`/`detail` are the RFC fields; `code` is a stable machine-readable error code and `hint` is a resolution hint. `error`/`message` mirror `title` for backward compatibility.",
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "A URI reference identifying the problem type."
          },
          "title": {
            "type": "string",
            "description": "Short, human-readable summary of the problem."
          },
          "status": {
            "type": "integer",
            "description": "HTTP status code."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation specific to this occurrence."
          },
          "code": {
            "type": "string",
            "description": "Stable machine-readable error code, e.g. \"invalid_email\"."
          },
          "message": {
            "type": "string",
            "description": "Human-readable message."
          },
          "hint": {
            "type": "string",
            "description": "How to resolve the error."
          },
          "error": {
            "type": "string",
            "description": "Human-readable message (mirrors `message`)."
          }
        }
      }
    }
  }
}