{"openapi":"3.1.2","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"3DIMLI Public API","version":"1.0.0","summary":"Machine-readable API and agent integration surface for 3DIMLI creator commerce.","description":"Verify software and game purchases, discover the OAuth-enabled 3DIMLI MCP server, and locate developer resources. Every operation has a stable operationId and typed schemas suitable for client generation and LLM function calling.","contact":{"name":"3DIMLI Support","email":"connect@3dimli.com","url":"https://support.3dimli.com"},"termsOfService":"https://www.3dimli.com/terms-of-services"},"externalDocs":{"description":"3DIMLI developer portal","url":"https://www.3dimli.com/developers"},"servers":[{"url":"https://www.3dimli.com","description":"Production"}],"tags":[{"name":"License verification","description":"Validate purchases for seller-owned software and games."},{"name":"MCP","description":"Discover and call the OAuth-enabled Model Context Protocol server."},{"name":"Discovery","description":"Machine-readable API, OAuth, MCP, and crawler metadata."}],"paths":{"/api/software/v1/verify":{"post":{"tags":["License verification"],"operationId":"verifySoftwareLicense","summary":"Verify a software license","description":"Checks whether an order-item license key belongs to a completed, non-refunded purchase of the seller-owned software product. Product slugs may be bare or prefixed with `software/`. Limited to 30 requests per 60 seconds per client IP.","security":[{"licenseToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseVerificationRequest"}}}},"responses":{"200":{"description":"The key was checked. Invalid or revoked keys deliberately return the same non-diagnostic result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseVerificationResult"}}}},"400":{"description":"The JSON body, license key, product slug, or client network metadata is invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"401":{"description":"The license-verification bearer token is missing or invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"403":{"description":"The token cannot verify this product or the seller plan is inactive.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"429":{"description":"The per-IP verification limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until another request should be attempted.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Maximum requests in the current 60-second window.","schema":{"type":"integer","const":30}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"500":{"description":"The verification request failed unexpectedly.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"503":{"description":"License verification is temporarily unavailable.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}}}}},"/api/games/v1/verify":{"post":{"tags":["License verification"],"operationId":"verifyGameLicense","summary":"Verify a game license","description":"Checks whether an order-item license key belongs to a completed, non-refunded purchase of the seller-owned game. Product slugs may be bare or prefixed with `games/`. Limited to 30 requests per 60 seconds per client IP.","security":[{"licenseToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseVerificationRequest"}}}},"responses":{"200":{"description":"The key was checked. Invalid or revoked keys deliberately return the same non-diagnostic result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseVerificationResult"}}}},"400":{"description":"The JSON body, license key, product slug, or client network metadata is invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"401":{"description":"The license-verification bearer token is missing or invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"403":{"description":"The token cannot verify this product or the seller plan is inactive.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"429":{"description":"The per-IP verification limit was exceeded.","headers":{"Retry-After":{"description":"Seconds until another request should be attempted.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Maximum requests in the current 60-second window.","schema":{"type":"integer","const":30}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"500":{"description":"The verification request failed unexpectedly.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"503":{"description":"License verification is temporarily unavailable.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}}}}},"/api/mcp/connector/mcp":{"post":{"tags":["MCP"],"operationId":"callMcpConnector","summary":"Send an MCP JSON-RPC message","description":"Streamable HTTP endpoint for the 3DIMLI MCP server. Initialize an MCP session, discover tools, and invoke tools using JSON-RPC 2.0. OAuth clients should request only the named scopes needed by the tools they intend to call.","security":[{"oauth2":[]}],"parameters":[{"name":"MCP-Protocol-Version","in":"header","required":false,"description":"MCP protocol version negotiated by the client.","schema":{"type":"string","examples":["2025-11-25"]}},{"name":"MCP-Session-Id","in":"header","required":false,"description":"Session identifier returned by initialization when the server creates a stateful session.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcMessage"}}}},"responses":{"200":{"description":"JSON-RPC response, returned directly or as an event stream.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcMessage"}},"text/event-stream":{"schema":{"type":"string","description":"Server-sent events containing JSON-RPC messages."}}}},"202":{"description":"A JSON-RPC notification or response was accepted without a response body."},"400":{"description":"The MCP or JSON-RPC request is malformed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"401":{"description":"Authentication is required or the token is invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"403":{"description":"The origin or granted scopes do not permit this request.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}},"429":{"description":"The MCP rate limit was exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ApiProblem"}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"tags":["Discovery"],"operationId":"getOAuthAuthorizationServerMetadata","summary":"Get OAuth authorization-server metadata","description":"Returns OAuth 2.0 authorization, token, dynamic registration, revocation, PKCE, and named-scope metadata for MCP clients.","security":[],"responses":{"200":{"description":"OAuth authorization-server metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthAuthorizationServerMetadata"}}}}}}},"/.well-known/oauth-protected-resource/api/mcp/connector/mcp":{"get":{"tags":["Discovery"],"operationId":"getMcpProtectedResourceMetadata","summary":"Get MCP protected-resource metadata","description":"Returns RFC 9728 metadata for the MCP protected resource, including authorization servers and supported least-privilege OAuth scopes.","security":[],"responses":{"200":{"description":"RFC 9728 protected-resource metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProtectedResourceMetadata"}}}}}}},"/openapi.json":{"get":{"tags":["Discovery"],"operationId":"getOpenApiDocument","summary":"Get the OpenAPI document","description":"Returns this OpenAPI 3.1.2 document as JSON.","security":[],"responses":{"200":{"description":"The complete OpenAPI document.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/server.json":{"get":{"tags":["Discovery","MCP"],"operationId":"getMcpServerManifest","summary":"Get the MCP server manifest","description":"Returns a server.json document conforming to the official MCP Registry schema and advertising the Streamable HTTP endpoint.","security":[],"responses":{"200":{"description":"Official MCP Registry server metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerManifest"}}}}}}},"/llms.txt":{"get":{"tags":["Discovery"],"operationId":"getLlmResourceIndex","summary":"Get the LLM resource index","description":"Returns a Markdown-formatted index of public product, developer, policy, and machine-readable resources.","security":[],"responses":{"200":{"description":"LLM-oriented public resource index.","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"securitySchemes":{"licenseToken":{"type":"http","scheme":"bearer","bearerFormat":"3DIMLI user API token","description":"Self-service token generated in the seller dashboard with the `license_verification` permission. Send it as `Authorization: Bearer <token>`."},"oauth2":{"type":"oauth2","description":"OAuth 2.0 Authorization Code with PKCE for the 3DIMLI MCP connector.","flows":{"authorizationCode":{"authorizationUrl":"https://www.3dimli.com/mcp/authorize","tokenUrl":"https://www.3dimli.com/api/mcp/oauth/token","refreshUrl":"https://www.3dimli.com/api/mcp/oauth/token","scopes":{"profile":"View and update your personal profile settings.","billing":"View and update your billing address information, and read seller subscription, billing timing, finalized vs pending sales totals, invoice status, and storage status details.","purchases":"Read your purchase history and order details.","meetings":"Read the meetings and sessions you booked as a buyer (dates, times, and status), reveal a booking's meeting link/location/phone, reschedule your own bookings, and ask the seller to reschedule when you can't.","downloads":"List downloadable purchases and inspect secure download metadata.","products":"Read and edit seller product content, pricing, SEO, and variants.","product_lifecycle":"Schedule, publish, and unpublish seller products.","audit":"Read audit feedback and reply to product audit conversations.","bookings":"Read your confirmed bookings (appointments, events, and webinars) including attendee names, emails, phone numbers, and the scheduled date/time of each session, and manage them: approve, mark no-show, cancel (refunding paid bookings), and reschedule.","store":"Read and update your seller store profile and branding.","website":"Read the website-builder block catalog and design system, and create, edit, and publish your store's website pages, reusable sections, and visual settings."}}}}},"schemas":{"LicenseVerificationRequest":{"type":"object","additionalProperties":false,"required":["key","product_slug"],"properties":{"key":{"type":"string","format":"uuid","description":"Order Item ID issued to the buyer as the license key.","examples":["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]},"product_slug":{"type":"string","minLength":1,"description":"Seller product slug. A leading slash or matching product-type prefix is accepted.","examples":["my-product"]}}},"LicenseVerificationResult":{"oneOf":[{"type":"object","additionalProperties":false,"required":["valid"],"properties":{"valid":{"type":"boolean","const":false}}},{"type":"object","additionalProperties":false,"required":["valid","productName"],"properties":{"valid":{"type":"boolean","const":true},"productName":{"type":"string"},"licenseName":{"type":["string","null"]},"productStatus":{"type":"string","description":"Returned by game verification when available."},"variant":{"$ref":"#/components/schemas/ProductVariant"}}}]},"ProductVariant":{"type":"object","additionalProperties":false,"required":["title"],"properties":{"title":{"type":"string"}}},"ApiProblem":{"type":"object","additionalProperties":true,"required":["type","title","status","detail","code","message","resolution","error"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","minimum":400,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Compatibility alias for detail."},"resolution":{"type":"string","description":"Specific recovery guidance for an agent or developer."},"error":{"type":"string","description":"Compatibility alias for code."}}},"JsonRpcMessage":{"type":"object","required":["jsonrpc"],"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"type":["string","number","null"]},"method":{"type":"string"},"params":{"type":"object","additionalProperties":true},"result":true,"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":true}}}},"OAuthAuthorizationServerMetadata":{"type":"object","required":["issuer","authorization_endpoint","token_endpoint","scopes_supported"],"properties":{"issuer":{"type":"string","format":"uri"},"authorization_endpoint":{"type":"string","format":"uri"},"token_endpoint":{"type":"string","format":"uri"},"registration_endpoint":{"type":"string","format":"uri"},"revocation_endpoint":{"type":"string","format":"uri"},"scopes_supported":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["profile","billing","purchases","meetings","downloads","products","product_lifecycle","audit","bookings","store","website"]}},"code_challenge_methods_supported":{"type":"array","items":{"type":"string","const":"S256"}},"protected_resources":{"type":"array","items":{"type":"string","format":"uri"}}}},"ProtectedResourceMetadata":{"type":"object","required":["resource","authorization_servers","scopes_supported"],"properties":{"resource":{"type":"string","format":"uri"},"authorization_servers":{"type":"array","items":{"type":"string","format":"uri"}},"scopes_supported":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["profile","billing","purchases","meetings","downloads","products","product_lifecycle","audit","bookings","store","website"]}},"bearer_methods_supported":{"type":"array","items":{"type":"string","enum":["header","body","query"]}},"resource_name":{"type":"string"},"resource_documentation":{"type":"string","format":"uri"}}},"McpServerManifest":{"type":"object","additionalProperties":true,"required":["$schema","name","description","version","remotes"],"properties":{"$schema":{"type":"string","format":"uri"},"name":{"type":"string","pattern":"^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$"},"title":{"type":"string"},"description":{"type":"string","minLength":1,"maxLength":100},"version":{"type":"string"},"websiteUrl":{"type":"string","format":"uri"},"remotes":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":true,"required":["type","url"],"properties":{"type":{"type":"string","const":"streamable-http"},"url":{"type":"string","format":"uri"}}}}}}}}}