{
  "name": "Qubit Notion API v1",
  "version": "1",
  "type": "collection",
  "environments": [
    {
      "name": "Sandbox",
      "variables": [
        {
          "name": "baseUrl",
          "value": "https://qubitnotion.com/api/v1",
          "enabled": true,
          "secret": false,
          "type": "text"
        },
        {
          "name": "apiKey",
          "value": "qn_sandbox_replace_me",
          "enabled": true,
          "secret": true,
          "type": "text"
        }
      ]
    }
  ],
  "items": [
    {
      "uid": "getMe",
      "name": "Describe the key and the workspace it belongs to",
      "type": "http",
      "seq": 1,
      "request": {
        "url": "{{baseUrl}}/me",
        "method": "GET",
        "headers": [],
        "params": [],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "Describe the key and the workspace it belongs to\n\nScopes: account:read"
      }
    },
    {
      "uid": "getLimits",
      "name": "Read the limits that apply to this key",
      "type": "http",
      "seq": 2,
      "request": {
        "url": "{{baseUrl}}/limits",
        "method": "GET",
        "headers": [],
        "params": [],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "Read the limits that apply to this key\n\nEvery window that applies, what it is scoped to, and how much is left right now. Reading this consumes one request.\n\nScopes: account:read"
      }
    },
    {
      "uid": "getVersions",
      "name": "List the dated versions inside v1",
      "type": "http",
      "seq": 3,
      "request": {
        "url": "{{baseUrl}}/versions",
        "method": "GET",
        "headers": [],
        "params": [],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "List the dated versions inside v1\n\nWhich dated version is stable, which one is in preview, what changes between them, and which version answered this call.\n\nScopes: account:read"
      }
    },
    {
      "uid": "issueAccessToken",
      "name": "Trade an API key for a short-lived access token",
      "type": "http",
      "seq": 4,
      "request": {
        "url": "{{baseUrl}}/oauth/token",
        "method": "POST",
        "headers": [
          {
            "name": "Content-Type",
            "value": "application/json",
            "enabled": true
          },
          {
            "name": "Idempotency-Key",
            "value": "{{$guid}}",
            "enabled": true
          }
        ],
        "params": [],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "json",
          "json": "{}"
        },
        "docs": "Trade an API key for a short-lived access token\n\nOAuth 2.0 client credentials. Send grant_type=client_credentials with your API key as client_secret, either in the body or as the password in HTTP basic auth. The token lasts one hour, carries the key's scopes or a subset you ask for in `scope`, and is accepted anywhere the key is. Every rule on the key still applies."
      }
    },
    {
      "uid": "listPlans",
      "name": "List media plans",
      "type": "http",
      "seq": 5,
      "request": {
        "url": "{{baseUrl}}/plans",
        "method": "GET",
        "headers": [],
        "params": [
          {
            "name": "limit",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "offset",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "cursor",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "status",
            "value": "",
            "type": "query",
            "enabled": false
          }
        ],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "List media plans\n\nScopes: plans:read"
      }
    },
    {
      "uid": "listCampaigns",
      "name": "List omni-channel campaigns",
      "type": "http",
      "seq": 6,
      "request": {
        "url": "{{baseUrl}}/campaigns",
        "method": "GET",
        "headers": [],
        "params": [
          {
            "name": "limit",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "offset",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "cursor",
            "value": "",
            "type": "query",
            "enabled": false
          }
        ],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "List omni-channel campaigns\n\nScopes: plans:read"
      }
    },
    {
      "uid": "listStudies",
      "name": "List research studies",
      "type": "http",
      "seq": 7,
      "request": {
        "url": "{{baseUrl}}/studies",
        "method": "GET",
        "headers": [],
        "params": [
          {
            "name": "limit",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "offset",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "cursor",
            "value": "",
            "type": "query",
            "enabled": false
          }
        ],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "List research studies\n\nScopes: research:read"
      }
    },
    {
      "uid": "listFindings",
      "name": "List research findings",
      "type": "http",
      "seq": 8,
      "request": {
        "url": "{{baseUrl}}/findings",
        "method": "GET",
        "headers": [],
        "params": [
          {
            "name": "limit",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "offset",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "cursor",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "study_id",
            "value": "",
            "type": "query",
            "enabled": false
          }
        ],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "List research findings\n\nScopes: research:read"
      }
    },
    {
      "uid": "trackEvents",
      "name": "Send server-side events into a PixelBridge pixel",
      "type": "http",
      "seq": 9,
      "request": {
        "url": "{{baseUrl}}/events",
        "method": "POST",
        "headers": [
          {
            "name": "Content-Type",
            "value": "application/json",
            "enabled": true
          },
          {
            "name": "Idempotency-Key",
            "value": "{{$guid}}",
            "enabled": true
          }
        ],
        "params": [],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "json",
          "json": "{}"
        },
        "docs": "Send server-side events into a PixelBridge pixel\n\nUp to 50 events per call. `event_id` deduplicates against events already recorded for the pixel, so a browser pixel and a server call reporting the same action collapse onto one row. Email and phone are hashed on receipt and the raw value is never stored. Send an Idempotency-Key header to make retries safe.\n\nScopes: events:write"
      }
    },
    {
      "uid": "listPixelRollups",
      "name": "List daily PixelBridge rollups",
      "type": "http",
      "seq": 10,
      "request": {
        "url": "{{baseUrl}}/pixel-rollups",
        "method": "GET",
        "headers": [],
        "params": [
          {
            "name": "limit",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "offset",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "cursor",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "from",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "to",
            "value": "",
            "type": "query",
            "enabled": false
          }
        ],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "List daily PixelBridge rollups\n\nScopes: pixel:read"
      }
    },
    {
      "uid": "importActuals",
      "name": "Import delivered performance into a media plan",
      "type": "http",
      "seq": 11,
      "request": {
        "url": "{{baseUrl}}/imports/actuals",
        "method": "POST",
        "headers": [
          {
            "name": "Content-Type",
            "value": "application/json",
            "enabled": true
          },
          {
            "name": "Idempotency-Key",
            "value": "{{$guid}}",
            "enabled": true
          }
        ],
        "params": [],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "json",
          "json": "{}"
        },
        "docs": "Import delivered performance into a media plan\n\nUp to 500 daily rows per call. A row is keyed on media plan, line item and date, so re-sending a day overwrites it instead of double-counting: a nightly sync that re-states the last seven days is safe. Omit `line_item_id` for plan-level totals. Sandbox keys may only write to demo plans.\n\nScopes: actuals:write"
      }
    },
    {
      "uid": "listWebhookDeliveries",
      "name": "List webhook deliveries",
      "type": "http",
      "seq": 12,
      "request": {
        "url": "{{baseUrl}}/webhook-deliveries",
        "method": "GET",
        "headers": [],
        "params": [
          {
            "name": "event_id",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "event_type",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "status",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "endpoint_id",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "limit",
            "value": "",
            "type": "query",
            "enabled": false
          },
          {
            "name": "cursor",
            "value": "",
            "type": "query",
            "enabled": false
          }
        ],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "List webhook deliveries\n\nThe delivery log behind the inspector. Filter by event id, event type, status or endpoint. A sandbox key only sees sandbox deliveries, a live key only live ones.\n\nScopes: webhooks:read"
      }
    },
    {
      "uid": "replayWebhookDelivery",
      "name": "Replay a webhook delivery",
      "type": "http",
      "seq": 13,
      "request": {
        "url": "{{baseUrl}}/webhook-deliveries/{id}/replay",
        "method": "POST",
        "headers": [
          {
            "name": "Content-Type",
            "value": "application/json",
            "enabled": true
          },
          {
            "name": "Idempotency-Key",
            "value": "{{$guid}}",
            "enabled": true
          }
        ],
        "params": [],
        "auth": {
          "mode": "bearer",
          "bearer": {
            "token": "{{apiKey}}"
          }
        },
        "body": {
          "mode": "none"
        },
        "docs": "Replay a webhook delivery\n\nSends the same payload again with the original event id, so your own deduplication still recognises it. The new attempt records the delivery it replayed.\n\nScopes: webhooks:write"
      }
    }
  ]
}