Skip to content

Commit

Permalink
feat: New api hosts (#7996)
Browse files Browse the repository at this point in the history
  • Loading branch information
benjackwhite authored Apr 22, 2024
1 parent e03c9c5 commit 54c4f2f
Show file tree
Hide file tree
Showing 184 changed files with 318 additions and 315 deletions.
2 changes: 1 addition & 1 deletion .env.production
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
GATSBY_POSTHOG_API_KEY=sTMFPsFhdP1Ssg
GATSBY_POSTHOG_API_HOST=https://d1iyf54ud053a4.cloudfront.net
GATSBY_POSTHOG_UI_HOST=https://app.posthog.com
GATSBY_POSTHOG_UI_HOST=https://us.posthog.com

GATSBY_SQUEAK_API_HOST=https://squeak.posthog.cc

Expand Down
2 changes: 1 addition & 1 deletion contents/blog/feature-flags-as-a-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Feature flags as a service integrate with your app like other external services.
```python
from posthog import Posthog

posthog = Posthog('<ph_project_api_key>', host='<ph_instance_address>')
posthog = Posthog('<ph_project_api_key>', host='<ph_client_api_host>')

is_my_flag_enabled = posthog.feature_enabled('flag-key', 'distinct_id_of_your_user')
```
Expand Down
2 changes: 1 addition & 1 deletion contents/blog/google-analytics-to-posthog.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ If you’ve set up Google Analytics, PostHog’s setup won’t look too differen
<!-- PostHog snippet -->
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
posthog.init('<ph_project_api_key>',{api_host:'<ph_instance_address>'})
posthog.init('<ph_project_api_key>',{api_host:'<ph_client_api_host>'})
</script>

<!-- Google tag (gtag.js) -->
Expand Down
6 changes: 3 additions & 3 deletions contents/blog/optimize-to-posthog.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ After signing up for PostHog, you can get your script snippet in [your project s
<!-- PostHog snippet -->
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
posthog.init('<ph_project_api_key>,{api_host:'<ph_instance_address>'})
posthog.init('<ph_project_api_key>,{api_host:'<ph_client_api_host>'})
</script>
<!-- Optimize -->
Expand Down Expand Up @@ -108,7 +108,7 @@ As a basic example, you can add the experiment logic to your `<script>` tag as c
```html
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
posthog.init('<ph_project_api_key>,{api_host:'<ph_instance_address>'})
posthog.init('<ph_project_api_key>,{api_host:'<ph_client_api_host>'})
posthog.onFeatureFlags(() => {
// Check the value of the 'test-flag' feature flag
Expand All @@ -128,7 +128,7 @@ If instead, you wanted to test the color and size Tailwind classes of a button w
```html
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
posthog.init('<ph_project_api_key>,{api_host:'<ph_instance_address>'})
posthog.init('<ph_project_api_key>,{api_host:'<ph_client_api_host>'})
posthog.onFeatureFlags(() => {
// Check the value of the 'test-flag' feature flag
Expand Down
2 changes: 1 addition & 1 deletion contents/blog/posthog-vs-optimizely.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ The core web experimentation features like traffic allocation, preview mode, cro
```html
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
posthog.init('<ph_project_api_key>',{api_host:'<ph_instance_address>'})
posthog.init('<ph_project_api_key>',{api_host:'<ph_client_api_host>'})
posthog.onFeatureFlags(() => {
// Check the value of the 'test-flag' feature flag
Expand Down
2 changes: 1 addition & 1 deletion contents/blog/track-your-website-with-posthog.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ If you’re on board and want to move ahead with tracking your marketing site wi
```html
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
posthog.init('<ph_project_api_key>', {api_host: '<ph_instance_address>'})
posthog.init('<ph_project_api_key>', {api_host: '<ph_client_api_host>'})
</script>
```

Expand Down
2 changes: 1 addition & 1 deletion contents/docs/_snippets/capture-group-event-code.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ curl -v -L --header "Content-Type: application/json" -d '{
"properties": {
"$groups": {"company": "company_id_in_your_db"}
}
}' <ph_instance_address>/capture/
}' <ph_client_api_host>/capture/
```

</MultiLanguage>
2 changes: 1 addition & 1 deletion contents/docs/_snippets/setting-group-properties.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ curl -v -L --header "Content-Type: application/json" -d '{
"date_joined": "2020-01-23"
}
}
}' <ph_instance_address>/capture/
}' <ph_client_api_host>/capture/
```

</MultiLanguage>
Expand Down
2 changes: 1 addition & 1 deletion contents/docs/advanced/proxy.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Setting up a reverse proxy means setting up a service to redirect requests from

> **Note:** PostHog Cloud requires that the proxy sets the `Host` header to the same host it is calling. Check the guides below on how to do that for several proxies.
You then use this subdomain as your instance host in the initialization of PostHog instead of `app.posthog.com` or `eu.posthog.com`.
You then use this subdomain as your `api_host` in the initialization of PostHog instead of `us.i.posthog.com` or `eu.i.posthog.com`.

> Make sure to [pass the proper `ui_host` parameter](/docs/libraries/js#config) when initializing our browser integration, so that links to the PostHog interface point to the correct host.
Expand Down
2 changes: 1 addition & 1 deletion contents/docs/advanced/proxy/caddy.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Run `caddy start` from the same folder as your `Caddyfile`. Once running, you ca
posthog.init('<ph_project_api_key>',
{
api_host:`${YOUR_TRACKING_DOMAIN}`,
ui_host: 'https://app.posthog.com' // or 'https://eu.posthog.com' if your PostHog is hosted in Europe
ui_host: 'https://us.i.posthog.com' // or 'https://eu.i.posthog.com' if your PostHog is hosted in Europe
}
)
</script>
Expand Down
2 changes: 1 addition & 1 deletion contents/docs/advanced/proxy/cloudfront.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Once created, copy the distribution domain name, and set it as your API host in
posthog.init('<ph_project_api_key>',
{
api_host: 'https://<distribution_domain_name>.cloudfront.net',
ui_host: 'https://app.posthog.com' // or 'https://eu.posthog.com' if your PostHog is hosted in Europe
ui_host: 'https://us.i.posthog.com' // or 'https://eu.i.posthog.com' if your PostHog is hosted in Europe
}
)
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ metadata:
name: posthog-proxy
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/upstream-vhost: us.i.posthog.com # Change to eu.posthog.com if needed.
nginx.ingress.kubernetes.io/upstream-vhost: us.i.posthog.com # Change to eu.i.posthog.com if needed.
nginx.ingress.kubernetes.io/backend-protocol: https
# Why configuration-snippet: https://github.com/kubernetes/ingress-nginx/issues/6728
# Change to eu.posthog.com if needed.
# Change to eu.i.posthog.com if needed.
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_ssl_name "us.i.posthog.com";
proxy_ssl_server_name "on";
Expand Down
2 changes: 1 addition & 1 deletion contents/docs/advanced/proxy/netlify.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Once done, set the `/ingest` route of your domain as the API host in your PostHo
posthog.init('<ph_project_api_key>',
{
api_host: 'https://www.your-domain.com/ingest',
ui_host: 'https://app.posthog.com' // or 'https://eu.posthog.com' if your PostHog is hosted in Europe
ui_host: 'https://us.i.posthog.com' // or 'https://eu.i.posthog.com' if your PostHog is hosted in Europe
}
)
```
Expand Down
2 changes: 1 addition & 1 deletion contents/docs/advanced/proxy/nextjs-middleware.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,6 @@ Once done, configure the PostHog client to send requests via your rewrite.
```js
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {
api_host: "/ingest",
ui_host: "https://app.posthog.com" // or "https://eu.posthog.com" if your PostHog is hosted in Europe
ui_host: "https://us.posthog.com" // or "https://eu.posthog.com" if your PostHog is hosted in Europe
})
```
2 changes: 1 addition & 1 deletion contents/docs/advanced/proxy/nextjs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Then configure the PostHog client to send requests via your rewrite.
```js
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {
api_host: "https://your-host.com/ingest"
ui_host: 'https://app.posthog.com' // or 'https://eu.posthog.com' if your PostHog is hosted in Europe
ui_host: 'https://us.i.posthog.com' // or 'https://eu.i.posthog.com' if your PostHog is hosted in Europe
})
```

Expand Down
2 changes: 1 addition & 1 deletion contents/docs/advanced/proxy/nuxt.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ Then configure the PostHog client to send requests via your new proxy:
```js
const posthogClient = posthog.init(runtimeConfig.public.posthogPublicKey, {
api_host: 'https://your-host.com/ingest',
ui_host: 'https://app.posthog.com', // or https://eu.posthog.com if your PostHog is hosted in Europe
ui_host: 'https://us.posthog.com', // or https://eu.posthog.com if your PostHog is hosted in Europe
});
```
2 changes: 1 addition & 1 deletion contents/docs/advanced/proxy/vercel.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Once done, set the `/ingest` route of your domain as the API host in your PostHo
posthog.init('<ph_project_api_key>',
{
api_host: 'https://www.your-domain.com/ingest',
ui_host: 'https://app.posthog.com' // or 'https://eu.posthog.com' if your PostHog is hosted in Europe
ui_host: 'https://us.i.posthog.com' // or 'https://eu.i.posthog.com' if your PostHog is hosted in Europe
}
)
```
Expand Down
2 changes: 1 addition & 1 deletion contents/docs/api/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ The API is available for all users and instances. It contains two types of endpo

2. **Private `GET`, `POST`, `PATCH`, `DELETE` endpoints** used for creating, updating, or deleting nearly all other non-event data in PostHog. They give the same access as if you were logged into your PostHog instance, but require authentication with your personal API key.

> You must make API requests to the correct domain. These are `https://app.posthog.com` for US Cloud, `https://eu.posthog.com` for EU Cloud, and your self-hosted domain for self-hosted instances. Confirm yours by checking your URL from your PostHog instance.
> You must make API requests to the correct domain. These are `https://us.posthog.com` for US Cloud, `https://eu.posthog.com` for EU Cloud, and your self-hosted domain for self-hosted instances. Confirm yours by checking your URL from your PostHog instance.
## Private endpoint authentication

Expand Down
12 changes: 6 additions & 6 deletions contents/docs/feature-flags/bootstrapping.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ To bootstrap PostHog with feature flags, use the `bootstrap` key in the initiali

```js-web
posthog.init('<ph_project_api_key>', {
api_host: '<ph_instance_address>',
api_host: '<ph_client_api_host>',
bootstrap: {
featureFlags: {
'flag-1': true,
Expand All @@ -38,8 +38,8 @@ import { usePostHog, PostHogProvider } from 'posthog-react-native'
export function MyApp() {
return (
<PostHogProvider apiKey="<ph_project_api_key>" options={{
// usually 'https://app.posthog.com' or 'https://eu.posthog.com'
host: '<ph_instance_address>', // TIP: host is optional if you use https://app.posthog.com
// usually 'https://us.i.posthog.com' or 'https://eu.i.posthog.com'
host: '<ph_client_api_host>', // TIP: host is optional if you use https://us.i.posthog.com
bootstrap: {
featureFlags: {
'flag-1': true,
Expand Down Expand Up @@ -82,7 +82,7 @@ The `bootstrap` object has two optional arguments: `distinctID` and `isIdentifie

```js-web
posthog.init('<ph_project_api_key>', {
api_host: '<ph_instance_address>',
api_host: '<ph_client_api_host>',
bootstrap: {
distinctID: 'distinct_id_of_your_user',
isIdentifiedID: true,
Expand All @@ -102,8 +102,8 @@ import { usePostHog, PostHogProvider } from 'posthog-react-native'
export function MyApp() {
return (
<PostHogProvider apiKey="<ph_project_api_key>" options={{
// usually 'https://app.posthog.com' or 'https://eu.posthog.com'
host: '<ph_instance_address>', // TIP: host is optional if you use https://app.posthog.com
// usually 'https://us.i.posthog.com' or 'https://eu.i.posthog.com'
host: '<ph_client_api_host>', // TIP: host is optional if you use https://us.i.posthog.com
bootstrap: {
distinctID: 'distinct_id_of_your_user',
isIdentifiedID: true,
Expand Down
10 changes: 5 additions & 5 deletions contents/docs/feature-flags/local-evaluation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ By default, PostHog fetches these definitions every 30 seconds (or 5 minutes in
const client = new PostHog(
'<ph_project_api_key>',
{
host: '<ph_instance_address>',
host: '<ph_client_api_host>',
personalApiKey: 'your personal API key from step 1',
featureFlagsPollingInterval: 30000 // Optional. Measured in milliseconds. Defaults to 30000 (30 seconds)
}
Expand All @@ -50,7 +50,7 @@ const client = new PostHog(
```ruby
posthog = PostHog::Client.new({
api_key: "<ph_project_api_key>",
host: "<ph_instance_address>",
host: "<ph_client_api_host>",
personal_api_key: 'your personal API key from step 1',
feature_flags_polling_interval: 30 # Optional. Measured in seconds. Defaults to 30.
})
Expand All @@ -68,7 +68,7 @@ func main() {
client, _ := posthog.NewWithConfig(
os.Getenv("POSTHOG_API_KEY"),
posthog.Config{
Endpoint: "<ph_instance_address>",
Endpoint: "<ph_client_api_host>",
PersonalApiKey: "your personal API key", // Required for feature flags
DefaultFeatureFlagsPollingInterval: 300 // Optional. Measured in seconds. Defaults to 300 (5 minutes).
// NextFeatureFlagsPollingTick: func() time.Duration {} // Optional. Use this to sync polling intervals between instances. For an example see: https://github.com/PostHog/posthog-go/pull/36#issuecomment-1991734125
Expand All @@ -81,7 +81,7 @@ func main() {

```php
PostHog::init("<ph_project_api_key>",
array('host' => '<ph_instance_address>'),
array('host' => '<ph_client_api_host>'),
null, // or custom http client
'YOUR PERSONAL API KEY from step 1'
);
Expand All @@ -92,7 +92,7 @@ PostHog::init("<ph_project_api_key>",
from posthog import Posthog

posthog = Posthog('<ph_project_api_key>',
host='<ph_instance_address>',
host='<ph_client_api_host>',
poll_interval=30, # Optional. Measured in seconds. Defaults to 30.
personal_api_key='your personal API key from step 1'
)
Expand Down
4 changes: 2 additions & 2 deletions contents/docs/hogql/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,12 @@ To query events using HogQL via the [PostHog API](/docs/api/query), get [your pr
{"query": {"kind": "HogQLQuery", "query": "select * from events"}}
```

For example, to get a count of the most common `event` values, you can make a request like this (change `app.posthog.com` to `eu.posthog.com` if you're on EU cloud):
For example, to get a count of the most common `event` values, you can make a request like this (change `us.posthog.com` to `eu.posthog.com` if you're on EU cloud):

<MultiLanguage>

```bash
curl -X POST "https://app.posthog.com/api/projects/:project_id/query" \
curl -X POST "https://us.posthog.com/api/projects/:project_id/query" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <personal_api_key>" \
-d '{
Expand Down
Loading

0 comments on commit 54c4f2f

Please sign in to comment.