{
  "name": "Qubit Notion",
  "description": "Say-Do Loop platform: audience research, media planning, activation and validation.",
  "api": {
    "base_url": "https://qubitnotion.com/api/v1",
    "version": "v1",
    "status": "private_beta",
    "dated_versions": {
      "stable": "2026-09-01",
      "preview": "2026-12-01",
      "list_url": "https://qubitnotion.com/api/v1/versions",
      "header": "QN-Version",
      "dry_run_parameter": "version=next",
      "served": [
        {
          "version": "2026-09-01",
          "status": "stable"
        },
        {
          "version": "2026-12-01",
          "status": "preview"
        }
      ]
    },
    "openapi_url": "https://qubitnotion.com/api/v1/openapi",
    "documentation_url": "https://qubitnotion.com/developers/reference",
    "versioning_policy_url": "https://qubitnotion.com/developers/versioning",
    "changelog_url": "https://qubitnotion.com/developers/changelog",
    "changelog_feed_url": "https://qubitnotion.com/api/public/changelog.xml",
    "errors_url": "https://qubitnotion.com/developers/errors",
    "limits_url": "https://qubitnotion.com/api/v1/limits"
  },
  "authentication": {
    "type": "bearer",
    "header": "Authorization",
    "format": "Bearer qn_live_… or Bearer qn_sandbox_…",
    "issued_in_app_at": "https://qubitnotion.com/app/api-keys",
    "environments": [
      "live",
      "sandbox"
    ],
    "sandbox_note": "Sandbox keys read showroom data only and can never touch live records."
  },
  "scopes": [
    {
      "scope": "account:read",
      "label": "Account",
      "description": "Read the workspace the key belongs to and the key's own settings."
    },
    {
      "scope": "plans:read",
      "label": "Plans",
      "description": "Read media plans and omni-channel campaigns."
    },
    {
      "scope": "research:read",
      "label": "Research",
      "description": "Read studies and published findings."
    },
    {
      "scope": "pixel:read",
      "label": "Pixel",
      "description": "Read daily PixelBridge rollups."
    },
    {
      "scope": "events:write",
      "label": "Send events",
      "description": "Send server-side conversion and behaviour events into a PixelBridge pixel."
    },
    {
      "scope": "actuals:write",
      "label": "Import delivered performance",
      "description": "Push daily delivered impressions, clicks, conversions and spend back into a media plan."
    },
    {
      "scope": "webhooks:read",
      "label": "Read webhook deliveries",
      "description": "Read the delivery log for the workspace's outbound webhook endpoints."
    },
    {
      "scope": "webhooks:write",
      "label": "Replay webhook deliveries",
      "description": "Send a past webhook delivery again with the same event id."
    }
  ],
  "rate_limits": {
    "windows": [
      {
        "name": "burst",
        "window_seconds": 60,
        "scope": "api_key",
        "default_limit": 120
      },
      {
        "name": "daily",
        "window_seconds": 86400,
        "scope": "api_key",
        "default_limit": 10000
      }
    ],
    "headers": [
      "RateLimit-Policy",
      "RateLimit-Limit",
      "RateLimit-Remaining",
      "RateLimit-Reset",
      "Retry-After"
    ],
    "rejected_requests_refunded": true
  },
  "pagination": {
    "style": "cursor",
    "parameter": "cursor",
    "default_limit": 50,
    "max_limit": 200
  },
  "errors": {
    "media_type": "application/problem+json",
    "specification": "RFC 9457",
    "codes": [
      {
        "code": "unauthorized",
        "status": 401,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/unauthorized"
      },
      {
        "code": "invalid_key",
        "status": 401,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/invalid_key"
      },
      {
        "code": "key_revoked",
        "status": 401,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/key_revoked"
      },
      {
        "code": "key_expired",
        "status": 401,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/key_expired"
      },
      {
        "code": "insufficient_scope",
        "status": 403,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/insufficient_scope"
      },
      {
        "code": "ip_not_allowed",
        "status": 403,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/ip_not_allowed"
      },
      {
        "code": "not_found",
        "status": 404,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/not_found"
      },
      {
        "code": "method_not_allowed",
        "status": 405,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/method_not_allowed"
      },
      {
        "code": "invalid_request",
        "status": 422,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/invalid_request"
      },
      {
        "code": "idempotency_key_reuse",
        "status": 409,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/idempotency_key_reuse"
      },
      {
        "code": "rate_limited",
        "status": 429,
        "retryable": true,
        "doc_url": "https://qubitnotion.com/developers/errors/rate_limited"
      },
      {
        "code": "quota_exceeded",
        "status": 429,
        "retryable": true,
        "doc_url": "https://qubitnotion.com/developers/errors/quota_exceeded"
      },
      {
        "code": "unsupported_version",
        "status": 400,
        "retryable": false,
        "doc_url": "https://qubitnotion.com/developers/errors/unsupported_version"
      },
      {
        "code": "internal_error",
        "status": 500,
        "retryable": true,
        "doc_url": "https://qubitnotion.com/developers/errors/internal_error"
      }
    ]
  },
  "webhooks": {
    "signature_header": "QN-Signature",
    "algorithm": "HMAC-SHA256 over `${timestamp}.${body}`",
    "tolerance_seconds": 300,
    "documentation_url": "https://qubitnotion.com/developers/webhooks"
  },
  "sdks": [
    {
      "language": "typescript",
      "package": "@qubitnotion/sdk",
      "registry": "npm"
    },
    {
      "language": "python",
      "package": "qubitnotion",
      "registry": "pypi"
    },
    {
      "language": "browser",
      "package": "@qubitnotion/pixel",
      "registry": "npm"
    }
  ],
  "mcp": {
    "endpoint": "https://qubitnotion.com/api/mcp",
    "auth": "oauth2",
    "documentation_url": "https://qubitnotion.com/developers/api"
  },
  "agents": {
    "llms_txt": "https://qubitnotion.com/llms.txt",
    "llms_full_txt": "https://qubitnotion.com/llms-full.txt"
  },
  "contact": {
    "support": "support@qubitnotion.com",
    "security": "https://qubitnotion.com/security"
  }
}