{"openapi":"3.1.0","info":{"title":"Pullsy API","description":"Pull your data. Skip the plumbing. Normalized Instagram data through a clean REST API.\n\n**Base URL** — `https://api.getpullsy.com/api/v1`\n\n**Authentication** — send an API key created in your dashboard:\n\n```\nAuthorization: Bearer pk_live_...\n```\n\nA key carries scopes (`data:read`, `sync:write`, `connections:write`) and is\nbound to the workspace it was created in.\n\n**Responses** put the payload under `data`, and lists add `pagination`:\n`page` (1-based), `limit` (default 50, maximum 200) and `has_more`. A failure\nreturns `{\"error\": {\"code\", \"message\", \"details\"}}`. Timestamps are ISO-8601\nUTC; date filters take `YYYY-MM-DD`.\n\n**Rate limits** are counted per key per minute and reported in\n`X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`.\nExceeding one returns `429 RATE_LIMITED` with `Retry-After`.\n\nThis reference covers the API your application calls. The endpoints the Pullsy\ndashboard uses to manage your account are not part of it.\n","version":"0.1.0"},"paths":{"/api/health/live":{"get":{"tags":["health"],"summary":"Live","operationId":"live_api_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}}}}}},"/api/health":{"get":{"tags":["health"],"summary":"Ready","operationId":"ready_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}}}}}},"/api/v1/connections":{"get":{"tags":["connections"],"summary":"List Connections","operationId":"list_connections_api_v1_connections_get","parameters":[{"name":"include_disconnected","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Disconnected"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_list_ConnectionDetailOut__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{provider}":{"post":{"tags":["connections"],"summary":"Start Connection","description":"Begin the OAuth flow. Returns the provider authorization URL to redirect the user to.","operationId":"start_connection_api_v1_connections__provider__post","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/OAuthStartRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_OAuthStartOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{connection_id}":{"get":{"tags":["connections"],"summary":"Get Connection","operationId":"get_connection_api_v1_connections__connection_id__get","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_ConnectionDetailOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["connections"],"summary":"Disconnect","operationId":"disconnect_api_v1_connections__connection_id__delete","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_ConnectionDetailOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{connection_id}/move":{"post":{"tags":["connections"],"summary":"Move Connection","description":"Move an account, with its whole synced history, to another workspace.","operationId":"move_connection_api_v1_connections__connection_id__move_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionMoveIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_ConnectionDetailOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{connection_id}/sync":{"post":{"tags":["connections"],"summary":"Trigger Sync","operationId":"trigger_sync_api_v1_connections__connection_id__sync_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_SyncJobOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/accounts":{"get":{"tags":["instagram"],"summary":"List Accounts","operationId":"list_accounts_api_v1_instagram_accounts_get","parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Connection Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramAccountOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/accounts/{account_id}":{"get":{"tags":["instagram"],"summary":"Get Account","operationId":"get_account_api_v1_instagram_accounts__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_InstagramAccountOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/accounts/{account_id}/metrics":{"get":{"tags":["instagram"],"summary":"Account Metrics","operationId":"account_metrics_api_v1_instagram_accounts__account_id__metrics_get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD, UTC)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD, UTC)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD, UTC)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD, UTC)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramAccountMetricOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/accounts/{account_id}/grade":{"get":{"tags":["instagram"],"summary":"Account Grade","description":"The account's grade, and every number behind it.\n\nFive pillars scored -- reach, engagement, intent, consistency, integrity --\nfrom the trailing 90 days of posts and whatever the account series covers.\nThe algorithm, its windows and its minimum samples are documented in\n`docs/account-grade.md`.\n\nComputed on read rather than stored. Every input is already in Postgres, so\na grade for any past day can be recomputed exactly; persisting it would buy\nnothing today except a row that could drift from the rows it came from.","operationId":"account_grade_api_v1_instagram_accounts__account_id__grade_get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_InstagramGradeOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/media":{"get":{"tags":["instagram"],"summary":"List Media","operationId":"list_media_api_v1_instagram_media_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"media_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IMAGE, VIDEO or CAROUSEL_ALBUM","title":"Media Type"},"description":"IMAGE, VIDEO or CAROUSEL_ALBUM"},{"name":"media_product_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"FEED or REELS","title":"Media Product Type"},"description":"FEED or REELS"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD, UTC)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD, UTC)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD, UTC)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD, UTC)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramMediaOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/media/performance":{"get":{"tags":["instagram"],"summary":"Media Performance","description":"Every post in the window with the newest snapshot of its insights.\n\nThe same posts /media returns, each carrying what /media/{id}/metrics\nwould have said -- which is otherwise one request per post. Comparing\nformats or publishing times across a quarter of posting is what this\nexists for.\n\nSorting by a metric happens here, not in the client: ranking only the\npages already fetched would call the best of the first thirty \"top\". A\npost Instagram has not reported on yet sorts after every reported one,\nnever as a zero.","operationId":"media_performance_api_v1_instagram_media_performance_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"media_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IMAGE, VIDEO or CAROUSEL_ALBUM","title":"Media Type"},"description":"IMAGE, VIDEO or CAROUSEL_ALBUM"},{"name":"media_product_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"FEED or REELS","title":"Media Product Type"},"description":"FEED or REELS"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD, UTC)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD, UTC)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD, UTC)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD, UTC)"},{"name":"sort","in":"query","required":false,"schema":{"enum":["recent","views","reach","engagements"],"type":"string","description":"recent (newest first), or by a metric, highest first; unreported last","default":"recent","title":"Sort"},"description":"recent (newest first), or by a metric, highest first; unreported last"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramMediaPerformanceOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/media/{media_id}":{"get":{"tags":["instagram"],"summary":"Get Media","operationId":"get_media_api_v1_instagram_media__media_id__get","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Media Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_InstagramMediaOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/media/{media_id}/metrics":{"get":{"tags":["instagram"],"summary":"Media Metrics","operationId":"media_metrics_api_v1_instagram_media__media_id__metrics_get","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Media Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD, UTC)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD, UTC)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD, UTC)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD, UTC)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramMediaMetricOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/media/{media_id}/snapshots":{"get":{"tags":["instagram"],"summary":"Media Snapshots","description":"Every reading kept for one post, newest first.\n\nThe daily sibling of this route answers \"where did this post end up on\neach day\". This one answers \"how did it get there\": the readings are kept\nas taken rather than collapsed into a day, so the first hours -- where\nnearly all of a post's reach happens -- are a curve rather than a dot.\n\nThe figures are cumulative lifetime totals, exactly as Instagram serves\nthem. Subtract consecutive rows for an interval; summing them counts the\nsame reach once per reading.\n\nReadings identical to the one before are not stored, so a gap means the\nnumbers did not move, never that nobody looked. Detail older than the\nretention window is pruned; the daily rows are kept forever.","operationId":"media_snapshots_api_v1_instagram_media__media_id__snapshots_get","parameters":[{"name":"media_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Media Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD, UTC)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD, UTC)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD, UTC)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD, UTC)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramMediaSnapshotOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/stories":{"get":{"tags":["instagram"],"summary":"List Stories","description":"Stories captured while they were live. Instagram serves them for 24 hours.","operationId":"list_stories_api_v1_instagram_stories_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD, UTC)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD, UTC)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD, UTC)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD, UTC)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramStoryOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/stories/performance":{"get":{"tags":["instagram"],"summary":"Stories Performance","description":"Every story in the window with the last figures read before it expired.","operationId":"stories_performance_api_v1_instagram_stories_performance_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD, UTC)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD, UTC)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD, UTC)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD, UTC)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramStoryPerformanceOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/stories/{story_id}":{"get":{"tags":["instagram"],"summary":"Get Story","operationId":"get_story_api_v1_instagram_stories__story_id__get","parameters":[{"name":"story_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Story Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_InstagramStoryOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/stories/{story_id}/metrics":{"get":{"tags":["instagram"],"summary":"Story Metrics","operationId":"story_metrics_api_v1_instagram_stories__story_id__metrics_get","parameters":[{"name":"story_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Story Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramStoryMetricOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instagram/stories/{story_id}/snapshots":{"get":{"tags":["instagram"],"summary":"Story Snapshots","description":"Every reading kept for one story, newest first.\n\nA story exists on the API for twenty-four hours, and Pullsy polls it on\nevery sync for as long as it lives. Those readings used to be written into\none daily row, each overwriting the last, so a whole story's life survived\nas a single figure. They are kept now.\n\nCumulative and gap-means-unchanged, like the media snapshots.","operationId":"story_snapshots_api_v1_instagram_stories__story_id__snapshots_get","parameters":[{"name":"story_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Story Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_InstagramStorySnapshotOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/accounts":{"get":{"tags":["meta ads"],"summary":"List Ad Accounts","operationId":"list_ad_accounts_api_v1_meta_ads_accounts_get","parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Connection Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_MetaAdAccountOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/accounts/{account_id}":{"get":{"tags":["meta ads"],"summary":"Get Ad Account","operationId":"get_ad_account_api_v1_meta_ads_accounts__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_MetaAdAccountOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/campaigns":{"get":{"tags":["meta ads"],"summary":"List Campaigns","operationId":"list_campaigns_api_v1_meta_ads_campaigns_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"effective_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Status"}},{"name":"objective","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objective"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_MetaCampaignOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/campaigns/{campaign_id}":{"get":{"tags":["meta ads"],"summary":"Get Campaign","operationId":"get_campaign_api_v1_meta_ads_campaigns__campaign_id__get","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_MetaCampaignOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/ad-sets":{"get":{"tags":["meta ads"],"summary":"List Ad Sets","operationId":"list_ad_sets_api_v1_meta_ads_ad_sets_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Campaign Id"}},{"name":"effective_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Status"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_MetaAdSetOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/ad-sets/{ad_set_id}":{"get":{"tags":["meta ads"],"summary":"Get Ad Set","operationId":"get_ad_set_api_v1_meta_ads_ad_sets__ad_set_id__get","parameters":[{"name":"ad_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Ad Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_MetaAdSetOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/ads":{"get":{"tags":["meta ads"],"summary":"List Ads","operationId":"list_ads_api_v1_meta_ads_ads_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"ad_set_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Ad Set Id"}},{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Campaign Id"}},{"name":"effective_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Status"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_MetaAdOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/ads/{ad_id}":{"get":{"tags":["meta ads"],"summary":"Get Ad","operationId":"get_ad_api_v1_meta_ads_ads__ad_id__get","parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Ad Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_MetaAdOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/insights":{"get":{"tags":["meta ads"],"summary":"List Insights","operationId":"list_insights_api_v1_meta_ads_insights_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"account, campaign, adset or ad","title":"Level"},"description":"account, campaign, adset or ad"},{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Campaign Id"}},{"name":"ad_set_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Ad Set Id"}},{"name":"ad_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Ad Id"}},{"name":"publisher_platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"facebook, instagram, messenger, audience_network, threads, or 'total' for the undivided row. Omit to get every row, including both.","title":"Publisher Platform"},"description":"facebook, instagram, messenger, audience_network, threads, or 'total' for the undivided row. Omit to get every row, including both."},{"name":"platform_position","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"instagram_reels, instagram_stories, feed, ... or 'total'","title":"Platform Position"},"description":"instagram_reels, instagram_stories, feed, ... or 'total'"},{"name":"breakdown_set","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Which pass to read: total, placement, age_gender, country, region, comscore_market, product, device, or one of the creative asset splits (asset_title, asset_body, asset_description, asset_image, asset_video, asset_call_to_action, asset_link_url, asset_format). Meta will not combine these with each other, so each is a separate reading of the same days — pick one rather than mixing.","title":"Breakdown Set"},"description":"Which pass to read: total, placement, age_gender, country, region, comscore_market, product, device, or one of the creative asset splits (asset_title, asset_body, asset_description, asset_image, asset_video, asset_call_to_action, asset_link_url, asset_format). Meta will not combine these with each other, so each is a separate reading of the same days — pick one rather than mixing."},{"name":"age","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Meta's buckets: 18-24, 25-34, ...","title":"Age"},"description":"Meta's buckets: 18-24, 25-34, ..."},{"name":"gender","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"male, female or unknown","title":"Gender"},"description":"male, female or unknown"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166-1 alpha-2, e.g. US","title":"Country"},"description":"ISO 3166-1 alpha-2, e.g. US"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},{"name":"comscore_market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Market name, as comScore defines them","title":"Comscore Market"},"description":"Market name, as comScore defines them"},{"name":"product_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Catalog product id for dynamic ads","title":"Product Id"},"description":"Catalog product id for dynamic ads"},{"name":"impression_device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"iphone, android_smartphone, desktop, ...","title":"Impression Device"},"description":"iphone, android_smartphone, desktop, ..."},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Meta's id for one creative asset. All eight asset splits share this column, so pair it with the breakdown_set that says which kind of asset it is: breakdown_set=asset_title&asset_id=123.","title":"Asset Id"},"description":"Meta's id for one creative asset. All eight asset splits share this column, so pair it with the breakdown_set that says which kind of asset it is: breakdown_set=asset_title&asset_id=123."},{"name":"hour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Hour of day as '00'..'23'. Both hourly splits share this column, so pair it with the breakdown_set that says whose clock it is: breakdown_set=hourly_audience&hour=21.","title":"Hour"},"description":"Hour of day as '00'..'23'. Both hourly splits share this column, so pair it with the breakdown_set that says whose clock it is: breakdown_set=hourly_audience&hour=21."},{"name":"frequency_value","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One frequency bucket as Meta labels it: '1'..'5', then '6-10', '11-15' and upward in fives. Only the frequency split populates it, and only `reach` is reported there.","title":"Frequency Value"},"description":"One frequency bucket as Meta labels it: '1'..'5', then '6-10', '11-15' and upward in fives. Only the frequency split populates it, and only `reach` is reported there."},{"name":"totals_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only the undivided rows. Use this for spend and reach over time: adding the placement rows double-counts reach, which is deduplicated per person.","default":false,"title":"Totals Only"},"description":"Only the undivided rows. Use this for spend and reach over time: adding the placement rows double-counts reach, which is deduplicated per person."},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_MetaAdInsightOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/actions":{"get":{"tags":["meta ads"],"summary":"List Actions","description":"Conversions, one row per action rather than a JSON array per day.\n\nThe breakdown context lives on the parent insight row, so this joins to it\nrather than repeating every dimension: conversions split by country is\n`?breakdown_set=country`, and by placement `?breakdown_set=placement`.","operationId":"list_actions_api_v1_meta_ads_actions_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"account, campaign, adset or ad","title":"Level"},"description":"account, campaign, adset or ad"},{"name":"action_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"purchase, link_click, offsite_conversion.fb_pixel_purchase, ...","title":"Action Type"},"description":"purchase, link_click, offsite_conversion.fb_pixel_purchase, ..."},{"name":"breakdown_set","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The parent rows' pass. Combine with a dimension filter for conversions by country or by age and gender: breakdown_set=country&country=US.","title":"Breakdown Set"},"description":"The parent rows' pass. Combine with a dimension filter for conversions by country or by age and gender: breakdown_set=country&country=US."},{"name":"publisher_platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher Platform"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One creative asset; pair with its breakdown_set","title":"Asset Id"},"description":"One creative asset; pair with its breakdown_set"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_MetaAdActionOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meta-ads/summary":{"get":{"tags":["meta ads"],"summary":"Summary","description":"Period totals, daily series and dimension split for one ad account.\n\nOne ad account, never \"all\": spend is denominated in the account's own\ncurrency and accounts routinely differ, so a combined total would be a\nnumber with no unit. Requiring the account in the signature is what makes\nthat impossible rather than merely discouraged.","operationId":"summary_api_v1_meta_ads_summary_get","parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Required: summaries never span accounts","title":"Account Id"},"description":"Required: summaries never span accounts"},{"name":"level","in":"query","required":false,"schema":{"type":"string","description":"account, campaign, adset or ad","default":"account","title":"Level"},"description":"account, campaign, adset or ad"},{"name":"breakdown_set","in":"query","required":false,"schema":{"type":"string","default":"total","title":"Breakdown Set"}},{"name":"breakdown_sets","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated splits to return together in `by_set`, so a dashboard can draw every split without a request each. `all` means every set that is not the undivided one.","title":"Breakdown Sets"},"description":"Comma-separated splits to return together in `by_set`, so a dashboard can draw every split without a request each. `all` means every set that is not the undivided one."},{"name":"conversion_splits","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated action breakdowns to return buckets for, or `all`. Every dimension is described in `conversion_splits` whether or not it is named here; naming one adds its counts.","title":"Conversion Splits"},"description":"Comma-separated action breakdowns to return buckets for, or `all`. Every dimension is described in `conversion_splits` whether or not it is named here; naming one adds its counts."},{"name":"actions_by_day","in":"query","required":false,"schema":{"type":"boolean","description":"Also return the daily series behind `actions`, for the busiest action types, so a dashboard can chart conversions over time without a request per day.","default":false,"title":"Actions By Day"},"description":"Also return the daily series behind `actions`, for the busiest action types, so a dashboard can chart conversions over time without a request per day."},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (YYYY-MM-DD)","title":"Date From"},"description":"Inclusive start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end date (YYYY-MM-DD)","title":"Date To"},"description":"Inclusive end date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_MetaAdsSummaryOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sync/jobs":{"get":{"tags":["sync"],"summary":"List Jobs","operationId":"list_jobs_api_v1_sync_jobs_get","parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Connection Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"queued, running, completed, failed, cancelled","title":"Status"},"description":"queued, running, completed, failed, cancelled"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_SyncJobOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sync/jobs/{job_id}":{"get":{"tags":["sync"],"summary":"Get Job","operationId":"get_job_api_v1_sync_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_SyncJobOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/entitlements":{"get":{"tags":["usage"],"summary":"Entitlements","description":"Your plan, the limits it grants and the usage counted against them.","operationId":"entitlements_api_v1_billing_entitlements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse_EntitlementsOut_"}}}}}}}},"components":{"schemas":{"ConnectedAccountOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"},"provider":{"type":"string","title":"Provider"},"external_account_id":{"type":"string","title":"External Account Id"},"username":{"type":"string","title":"Username"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"profile_picture_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Picture Url"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"},"followers_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Followers Count"},"follows_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Follows Count"},"media_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Media Count"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","connection_id","provider","external_account_id","username","name","profile_picture_url","account_type","followers_count","follows_count","media_count","last_synced_at","created_at","updated_at"],"title":"ConnectedAccountOut","description":"One account reachable through a connection, in provider-neutral terms.\n\nEvery provider has a handle, a picture and a few headline counters; the\nshapes only diverge below that, which is what the per-provider routes are\nfor. Keeping this list generic is what stops `/connections` from being an\nInstagram endpoint wearing a general name."},"ConnectionDetailOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"status":{"type":"string","title":"Status"},"external_user_id":{"type":"string","title":"External User Id"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"authorized_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorized By"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"sync_interval_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sync Interval Minutes"},"next_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Sync At"},"last_sync_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync Started At"},"last_successful_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Successful Sync At"},"last_sync_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Sync Error"},"last_sync_error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Sync Error Code"},"disconnected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Disconnected At"},"data_purge_after":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Data Purge After"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"accounts":{"items":{"$ref":"#/components/schemas/ConnectedAccountOut"},"type":"array","title":"Accounts","default":[]},"active_job":{"anyOf":[{"$ref":"#/components/schemas/SyncJobOut"},{"type":"null"}]}},"type":"object","required":["id","provider","status","external_user_id","display_name","scopes","expires_at","sync_interval_minutes","next_sync_at","last_sync_started_at","last_successful_sync_at","last_sync_error","last_sync_error_code","disconnected_at","created_at","updated_at"],"title":"ConnectionDetailOut"},"ConnectionMoveIn":{"properties":{"workspace_id":{"type":"string","format":"uuid","title":"Workspace Id"}},"type":"object","required":["workspace_id"],"title":"ConnectionMoveIn"},"DataResponse_ConnectionDetailOut_":{"properties":{"data":{"$ref":"#/components/schemas/ConnectionDetailOut"}},"type":"object","required":["data"],"title":"DataResponse[ConnectionDetailOut]"},"DataResponse_EntitlementsOut_":{"properties":{"data":{"$ref":"#/components/schemas/EntitlementsOut"}},"type":"object","required":["data"],"title":"DataResponse[EntitlementsOut]"},"DataResponse_InstagramAccountOut_":{"properties":{"data":{"$ref":"#/components/schemas/InstagramAccountOut"}},"type":"object","required":["data"],"title":"DataResponse[InstagramAccountOut]"},"DataResponse_InstagramGradeOut_":{"properties":{"data":{"$ref":"#/components/schemas/InstagramGradeOut"}},"type":"object","required":["data"],"title":"DataResponse[InstagramGradeOut]"},"DataResponse_InstagramMediaOut_":{"properties":{"data":{"$ref":"#/components/schemas/InstagramMediaOut"}},"type":"object","required":["data"],"title":"DataResponse[InstagramMediaOut]"},"DataResponse_InstagramStoryOut_":{"properties":{"data":{"$ref":"#/components/schemas/InstagramStoryOut"}},"type":"object","required":["data"],"title":"DataResponse[InstagramStoryOut]"},"DataResponse_MetaAdAccountOut_":{"properties":{"data":{"$ref":"#/components/schemas/MetaAdAccountOut"}},"type":"object","required":["data"],"title":"DataResponse[MetaAdAccountOut]"},"DataResponse_MetaAdOut_":{"properties":{"data":{"$ref":"#/components/schemas/MetaAdOut"}},"type":"object","required":["data"],"title":"DataResponse[MetaAdOut]"},"DataResponse_MetaAdSetOut_":{"properties":{"data":{"$ref":"#/components/schemas/MetaAdSetOut"}},"type":"object","required":["data"],"title":"DataResponse[MetaAdSetOut]"},"DataResponse_MetaAdsSummaryOut_":{"properties":{"data":{"$ref":"#/components/schemas/MetaAdsSummaryOut"}},"type":"object","required":["data"],"title":"DataResponse[MetaAdsSummaryOut]"},"DataResponse_MetaCampaignOut_":{"properties":{"data":{"$ref":"#/components/schemas/MetaCampaignOut"}},"type":"object","required":["data"],"title":"DataResponse[MetaCampaignOut]"},"DataResponse_OAuthStartOut_":{"properties":{"data":{"$ref":"#/components/schemas/OAuthStartOut"}},"type":"object","required":["data"],"title":"DataResponse[OAuthStartOut]"},"DataResponse_SyncJobOut_":{"properties":{"data":{"$ref":"#/components/schemas/SyncJobOut"}},"type":"object","required":["data"],"title":"DataResponse[SyncJobOut]"},"DataResponse_list_ConnectionDetailOut__":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ConnectionDetailOut"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"DataResponse[list[ConnectionDetailOut]]"},"EntitlementsOut":{"properties":{"source":{"type":"string","title":"Source"},"plan_code":{"type":"string","title":"Plan Code"},"plan_name":{"type":"string","title":"Plan Name"},"status":{"type":"string","title":"Status"},"limits":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object","title":"Limits"},"usage":{"additionalProperties":{"type":"integer"},"type":"object","title":"Usage"},"trial_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Ends At"},"subscription_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Subscription Id"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"can_sync":{"type":"boolean","title":"Can Sync"}},"type":"object","required":["source","plan_code","plan_name","status","limits","usage","trial_ends_at","subscription_id","current_period_end","cancel_at_period_end","can_sync"],"title":"EntitlementsOut"},"GradeBandOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"}},"type":"object","required":["key","label"],"title":"GradeBandOut"},"GradeCapOut":{"properties":{"rule":{"type":"string","title":"Rule"},"ceiling":{"type":"string","title":"Ceiling"},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["rule","ceiling","detail"],"title":"GradeCapOut","description":"A rule that overruled the weighted sum, and why."},"GradeHighlightOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"unit":{"type":"string","title":"Unit"},"value":{"type":"number","title":"Value"},"measured":{"type":"integer","title":"Measured"},"of":{"type":"integer","title":"Of"}},"type":"object","required":["key","label","unit","value","measured","of"],"title":"GradeHighlightOut","description":"One number chosen to carry the account on a card.\n\nPicked on the server, from the measures that actually came back, so the\nshare image and the share page cannot disagree about which three numbers\nthis account leads with -- and so a card can never lead with an em dash."},"GradeMeasureOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"hint":{"type":"string","title":"Hint"},"unit":{"type":"string","title":"Unit"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"measured":{"type":"integer","title":"Measured"},"of":{"type":"integer","title":"Of"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"weight":{"type":"number","title":"Weight"},"unscored_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unscored Reason"}},"type":"object","required":["key","label","hint","unit","value","measured","of","score","weight","unscored_reason"],"title":"GradeMeasureOut","description":"One number, what it was drawn from, and how it scored.\n\n`measured` and `of` travel with every value on purpose: a reach rate from\nthree posts and one from ninety are not the same finding, and a surface\nthat shows only the number cannot tell them apart. `value` is null when\nthere were not enough observations -- never zero, which would read as a\nmeasured absence rather than a missing measurement."},"GradeMissingOut":{"properties":{"scored_weight":{"type":"number","title":"Scored Weight"},"dropped_weight":{"type":"number","title":"Dropped Weight"},"not_built_weight":{"type":"number","title":"Not Built Weight"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"}},"type":"object","required":["scored_weight","dropped_weight","not_built_weight","reasons"],"title":"GradeMissingOut"},"GradeOpportunityOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"pillar":{"type":"string","title":"Pillar"},"hint":{"type":"string","title":"Hint"},"headroom":{"type":"number","title":"Headroom"}},"type":"object","required":["key","label","pillar","hint","headroom"],"title":"GradeOpportunityOut"},"GradePillarOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"question":{"type":"string","title":"Question"},"weight":{"type":"number","title":"Weight"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"measures":{"items":{"$ref":"#/components/schemas/GradeMeasureOut"},"type":"array","title":"Measures"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"status":{"type":"string","title":"Status"},"extra":{"additionalProperties":true,"type":"object","title":"Extra"}},"type":"object","required":["key","label","question","weight","score","measures","note","status","extra"],"title":"GradePillarOut"},"GradeWindowOut":{"properties":{"date_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"},"date_to":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"},"days_in_window":{"type":"integer","title":"Days In Window"},"days_covered":{"type":"integer","title":"Days Covered"},"posts_in_window":{"type":"integer","title":"Posts In Window"},"posts_measured":{"type":"integer","title":"Posts Measured"},"stories_measured":{"type":"integer","title":"Stories Measured"}},"type":"object","required":["date_from","date_to","days_in_window","days_covered","posts_in_window","posts_measured","stories_measured"],"title":"GradeWindowOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthOut":{"properties":{"status":{"type":"string","title":"Status"},"database":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Database"},"redis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redis"},"version":{"type":"string","title":"Version"},"commit":{"type":"string","title":"Commit"},"started_at":{"type":"string","format":"date-time","title":"Started At"}},"type":"object","required":["status","version","commit","started_at"],"title":"HealthOut"},"InstagramAccountMetricOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"instagram_account_id":{"type":"string","format":"uuid","title":"Instagram Account Id"},"metric_date":{"type":"string","format":"date","title":"Metric Date"},"followers":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Followers"},"following":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Following"},"media_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Media Count"},"reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reach"},"views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Views"},"accounts_engaged":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Accounts Engaged"},"engagements":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Engagements"},"likes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Likes"},"comments":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Comments"},"shares":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Shares"},"saves":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Saves"},"replies":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Replies"},"profile_links_taps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Links Taps"},"reposts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reposts"},"profile_views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Views"},"website_clicks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Website Clicks"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","instagram_account_id","metric_date","followers","following","media_count","reach","views","accounts_engaged","engagements","likes","comments","shares","saves","replies","profile_links_taps","reposts","profile_views","website_clicks","created_at","updated_at"],"title":"InstagramAccountMetricOut"},"InstagramAccountOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"},"external_account_id":{"type":"string","title":"External Account Id"},"username":{"type":"string","title":"Username"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"profile_picture_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Picture Url"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"},"followers_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Followers Count"},"follows_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Follows Count"},"media_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Media Count"},"biography":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Biography"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","connection_id","external_account_id","username","name","profile_picture_url","account_type","followers_count","follows_count","media_count","biography","website","last_synced_at","created_at","updated_at"],"title":"InstagramAccountOut"},"InstagramGradeOut":{"properties":{"account_id":{"type":"string","title":"Account Id"},"username":{"type":"string","title":"Username"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"},"basis":{"type":"string","title":"Basis"},"band":{"$ref":"#/components/schemas/GradeBandOut"},"window":{"$ref":"#/components/schemas/GradeWindowOut"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"letter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Letter"},"verdict":{"type":"string","title":"Verdict"},"pillars":{"items":{"$ref":"#/components/schemas/GradePillarOut"},"type":"array","title":"Pillars"},"caps":{"items":{"$ref":"#/components/schemas/GradeCapOut"},"type":"array","title":"Caps"},"missing":{"$ref":"#/components/schemas/GradeMissingOut"},"opportunities":{"items":{"$ref":"#/components/schemas/GradeOpportunityOut"},"type":"array","title":"Opportunities"},"highlights":{"items":{"$ref":"#/components/schemas/GradeHighlightOut"},"type":"array","title":"Highlights"}},"type":"object","required":["account_id","username","computed_at","basis","band","window","score","letter","verdict","pillars","caps","missing","opportunities","highlights"],"title":"InstagramGradeOut","description":"An account's grade, and every number behind it.\n\n`score` and `letter` are null when the account has not published or synced\nenough for a letter to mean anything. That is not a failing grade, and the\nsurfaces are expected to say so rather than render an F."},"InstagramMediaMetricOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"instagram_media_id":{"type":"string","format":"uuid","title":"Instagram Media Id"},"metric_date":{"type":"string","format":"date","title":"Metric Date"},"likes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Likes"},"comments":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Comments"},"shares":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Shares"},"saves":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Saves"},"reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reach"},"views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Views"},"engagements":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Engagements"},"profile_visits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Visits"},"follows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Follows"},"profile_activity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Activity"},"reels_skip_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Reels Skip Rate"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","instagram_media_id","metric_date","likes","comments","shares","saves","reach","views","engagements","profile_visits","follows","profile_activity","reels_skip_rate","created_at","updated_at"],"title":"InstagramMediaMetricOut"},"InstagramMediaOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"instagram_account_id":{"type":"string","format":"uuid","title":"Instagram Account Id"},"external_media_id":{"type":"string","title":"External Media Id"},"media_type":{"type":"string","title":"Media Type"},"media_product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Product Type"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"permalink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permalink"},"media_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"like_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Like Count"},"comments_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Comments Count"},"is_comment_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Comment Enabled"},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Text"},"is_shared_to_feed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Shared To Feed"},"is_ai_generated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Ai Generated"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"insights_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Insights Synced At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","instagram_account_id","external_media_id","media_type","media_product_type","caption","permalink","media_url","thumbnail_url","published_at","like_count","comments_count","is_comment_enabled","alt_text","is_shared_to_feed","is_ai_generated","last_synced_at","insights_synced_at","created_at","updated_at"],"title":"InstagramMediaOut"},"InstagramMediaPerformanceOut":{"properties":{"media":{"$ref":"#/components/schemas/InstagramMediaOut"},"metrics":{"anyOf":[{"$ref":"#/components/schemas/InstagramMediaMetricOut"},{"type":"null"}]}},"type":"object","required":["media","metrics"],"title":"InstagramMediaPerformanceOut","description":"A post with the newest snapshot of its lifetime insights attached.\n\nThe two halves are otherwise two calls per post: the list, then the\nmetrics. Media insights are lifetime totals rather than per-day deltas, so\nthe newest row *is* the post's score and there is nothing to sum.\n\n`metrics` is null for a post Instagram has not reported on yet, which is\nnot the same thing as a post that scored zero -- a reader that treats the\nabsence as a zero will rank a brand-new post below a failed one."},"InstagramMediaSnapshotOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"instagram_media_id":{"type":"string","format":"uuid","title":"Instagram Media Id"},"captured_at":{"type":"string","format":"date-time","title":"Captured At"},"likes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Likes"},"comments":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Comments"},"shares":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Shares"},"saves":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Saves"},"reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reach"},"views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Views"},"engagements":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Engagements"},"profile_visits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Visits"},"follows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Follows"},"profile_activity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Activity"},"reels_skip_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Reels Skip Rate"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","instagram_media_id","captured_at","likes","comments","shares","saves","reach","views","engagements","profile_visits","follows","profile_activity","reels_skip_rate","created_at","updated_at"],"title":"InstagramMediaSnapshotOut","description":"One reading of a post, at the moment it was read.\n\nThe high-resolution twin of :class:`InstagramMediaMetricOut`. Same figures,\nbut keyed on ``captured_at`` -- the instant Pullsy read them -- instead of\non the UTC day, and never overwritten.\n\n**Cumulative lifetime totals, as Instagram serves them.** A row is where\nthe post stood at that moment, not what happened since the row before it.\nSubtract two rows for an interval; never sum them.\n\nGaps are meaningful and mean \"unchanged\": a reading identical to the one\nbefore it is not stored, so a post that has stopped moving writes nothing."},"InstagramStoryMetricOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"instagram_story_id":{"type":"string","format":"uuid","title":"Instagram Story Id"},"metric_date":{"type":"string","format":"date","title":"Metric Date"},"reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reach"},"views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Views"},"replies":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Replies"},"shares":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Shares"},"engagements":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Engagements"},"profile_visits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Visits"},"follows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Follows"},"profile_activity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Activity"},"navigation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation"},"navigation_swipe_forward":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation Swipe Forward"},"navigation_tap_forward":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation Tap Forward"},"navigation_tap_back":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation Tap Back"},"navigation_tap_exit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation Tap Exit"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","instagram_story_id","metric_date","reach","views","replies","shares","engagements","profile_visits","follows","profile_activity","navigation","navigation_swipe_forward","navigation_tap_forward","navigation_tap_back","navigation_tap_exit","created_at","updated_at"],"title":"InstagramStoryMetricOut"},"InstagramStoryOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"instagram_account_id":{"type":"string","format":"uuid","title":"Instagram Account Id"},"external_media_id":{"type":"string","title":"External Media Id"},"media_type":{"type":"string","title":"Media Type"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"permalink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permalink"},"media_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"last_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen At"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"insights_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Insights Synced At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","instagram_account_id","external_media_id","media_type","caption","permalink","media_url","thumbnail_url","published_at","last_seen_at","last_synced_at","insights_synced_at","created_at","updated_at"],"title":"InstagramStoryOut"},"InstagramStoryPerformanceOut":{"properties":{"story":{"$ref":"#/components/schemas/InstagramStoryOut"},"metrics":{"anyOf":[{"$ref":"#/components/schemas/InstagramStoryMetricOut"},{"type":"null"}]}},"type":"object","required":["story","metrics"],"title":"InstagramStoryPerformanceOut","description":"A story with the last figures read before it expired.\n\nA story usually has exactly one metric row: it lives for 24 hours, so it\nrarely spans two UTC days. `metrics` is null when Instagram never served\ninsights for it, which it declines to do below five viewers."},"InstagramStorySnapshotOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"instagram_story_id":{"type":"string","format":"uuid","title":"Instagram Story Id"},"captured_at":{"type":"string","format":"date-time","title":"Captured At"},"reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reach"},"views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Views"},"replies":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Replies"},"shares":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Shares"},"engagements":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Engagements"},"profile_visits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Visits"},"follows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Follows"},"profile_activity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profile Activity"},"navigation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation"},"navigation_swipe_forward":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation Swipe Forward"},"navigation_tap_forward":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation Tap Forward"},"navigation_tap_back":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation Tap Back"},"navigation_tap_exit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Navigation Tap Exit"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","instagram_story_id","captured_at","reach","views","replies","shares","engagements","profile_visits","follows","profile_activity","navigation","navigation_swipe_forward","navigation_tap_forward","navigation_tap_back","navigation_tap_exit","created_at","updated_at"],"title":"InstagramStorySnapshotOut","description":"One reading of a story, at the moment it was read.\n\nA story lives twenty-four hours and is polled on every sync, so this is the\ntable that can actually draw one: the daily row it used to collapse into\nheld only the last reading before it expired.\n\nCumulative, gap-means-unchanged, same as the media snapshots."},"MetaAdAccountOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"},"external_account_id":{"type":"string","title":"External Account Id"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"timezone_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone Name"},"account_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Status"},"business_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Id"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"},"amount_spent":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Spent"},"spend_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Spend Cap"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","connection_id","external_account_id","account_id","name","currency","timezone_name","account_status","business_id","business_name","amount_spent","spend_cap","last_synced_at","created_at","updated_at"],"title":"MetaAdAccountOut"},"MetaAdActionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"meta_ad_insight_id":{"type":"string","format":"uuid","title":"Meta Ad Insight Id"},"metric_date":{"type":"string","format":"date","title":"Metric Date"},"level":{"type":"string","title":"Level"},"entity_external_id":{"type":"string","title":"Entity External Id"},"breakdown_set":{"type":"string","title":"Breakdown Set"},"dimension":{"type":"string","title":"Dimension"},"action_type":{"type":"string","title":"Action Type"},"action_destination":{"type":"string","title":"Action Destination"},"action_target_id":{"type":"string","title":"Action Target Id"},"value":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Value"},"action_value":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Action Value"},"cost_per_action":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Per Action"},"attribution_windows":{"additionalProperties":true,"type":"object","title":"Attribution Windows","default":{}}},"type":"object","required":["id","meta_ad_insight_id","metric_date","level","entity_external_id","breakdown_set","dimension","action_type","action_destination","action_target_id","value","action_value","cost_per_action"],"title":"MetaAdActionOut","description":"One conversion action, unnested from an insight row.\n\nThe breakdown context is carried alongside rather than joined for: without\nit, a day split by region returns a dozen rows all reading \"link_click\"\nwith nothing to tell them apart, which looks like duplicate data and is\nreally Ontario, England and British Columbia."},"MetaAdInsightOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"meta_ad_account_id":{"type":"string","format":"uuid","title":"Meta Ad Account Id"},"level":{"type":"string","title":"Level"},"entity_external_id":{"type":"string","title":"Entity External Id"},"meta_campaign_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Meta Campaign Id"},"meta_ad_set_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Meta Ad Set Id"},"meta_ad_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Meta Ad Id"},"metric_date":{"type":"string","format":"date","title":"Metric Date"},"breakdown_set":{"type":"string","title":"Breakdown Set"},"breakdown_key":{"type":"string","title":"Breakdown Key"},"publisher_platform":{"type":"string","title":"Publisher Platform"},"platform_position":{"type":"string","title":"Platform Position"},"age":{"type":"string","title":"Age"},"gender":{"type":"string","title":"Gender"},"country":{"type":"string","title":"Country"},"region":{"type":"string","title":"Region"},"comscore_market":{"type":"string","title":"Comscore Market"},"product_id":{"type":"string","title":"Product Id"},"impression_device":{"type":"string","title":"Impression Device"},"asset_id":{"type":"string","title":"Asset Id"},"asset_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Label"},"asset_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Url"},"hour":{"type":"string","title":"Hour"},"frequency_value":{"type":"string","title":"Frequency Value"},"impressions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Impressions"},"reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reach"},"frequency":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Frequency"},"clicks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Clicks"},"unique_clicks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unique Clicks"},"inline_link_clicks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Inline Link Clicks"},"spend":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Spend"},"cpc":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cpc"},"cpm":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cpm"},"cpp":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cpp"},"ctr":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Ctr"},"actions":{"items":{},"type":"array","title":"Actions","default":[]},"action_values":{"items":{},"type":"array","title":"Action Values","default":[]},"conversions":{"items":{},"type":"array","title":"Conversions","default":[]},"purchase_roas":{"items":{},"type":"array","title":"Purchase Roas","default":[]},"video_p25_watched":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video P25 Watched"},"video_p50_watched":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video P50 Watched"},"video_p75_watched":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video P75 Watched"},"video_p100_watched":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video P100 Watched"},"video_plays":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video Plays"},"video_thruplays":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video Thruplays"},"video_30_sec_watched":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video 30 Sec Watched"},"video_continuous_2_sec_watched":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video Continuous 2 Sec Watched"},"video_avg_time_watched":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video Avg Time Watched"},"quality_ranking":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quality Ranking"},"engagement_rate_ranking":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Engagement Rate Ranking"},"conversion_rate_ranking":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversion Rate Ranking"},"results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Results"},"result_indicator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Indicator"},"cost_per_result":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Per Result"}},"type":"object","required":["id","meta_ad_account_id","level","entity_external_id","meta_campaign_id","meta_ad_set_id","meta_ad_id","metric_date","breakdown_set","breakdown_key","publisher_platform","platform_position","age","gender","country","region","comscore_market","product_id","impression_device","asset_id","asset_label","asset_url","hour","frequency_value","impressions","reach","frequency","clicks","unique_clicks","inline_link_clicks","spend","cpc","cpm","cpp","ctr","video_p25_watched","video_p50_watched","video_p75_watched","video_p100_watched","video_plays","video_thruplays","video_30_sec_watched","video_continuous_2_sec_watched","video_avg_time_watched","quality_ranking","engagement_rate_ranking","conversion_rate_ranking"],"title":"MetaAdInsightOut","description":"One day of figures for one entity, at one placement or in total.\n\n``publisher_platform`` and ``platform_position`` are ``\"total\"`` on an\nundivided row and a real Meta value otherwise -- so filtering\n``publisher_platform=instagram`` is how a caller asks what Instagram did.\n``reach`` and ``frequency`` are deduplicated per person and must not be\nsummed across placements; the ``\"total\"`` row already holds the correct\nfigure for the day."},"MetaAdOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"meta_ad_account_id":{"type":"string","format":"uuid","title":"Meta Ad Account Id"},"meta_ad_set_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Meta Ad Set Id"},"meta_campaign_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Meta Campaign Id"},"external_ad_id":{"type":"string","title":"External Ad Id"},"external_ad_set_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ad Set Id"},"external_campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Campaign Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"effective_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Status"},"external_creative_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Creative Id"},"creative_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Name"},"creative_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Title"},"creative_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Body"},"creative_thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Thumbnail Url"},"creative_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Image Url"},"creative_object_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creative Object Type"},"preview_shareable_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Shareable Link"},"created_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Time"},"updated_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Time"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","required":["id","meta_ad_account_id","meta_ad_set_id","meta_campaign_id","external_ad_id","external_ad_set_id","external_campaign_id","name","status","effective_status","external_creative_id","creative_name","creative_title","creative_body","creative_thumbnail_url","creative_image_url","creative_object_type","preview_shareable_link","created_time","updated_time","last_synced_at"],"title":"MetaAdOut"},"MetaAdSetOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"meta_ad_account_id":{"type":"string","format":"uuid","title":"Meta Ad Account Id"},"meta_campaign_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Meta Campaign Id"},"external_ad_set_id":{"type":"string","title":"External Ad Set Id"},"external_campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Campaign Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"effective_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Status"},"optimization_goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Optimization Goal"},"billing_event":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Event"},"bid_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid Strategy"},"daily_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Budget"},"lifetime_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lifetime Budget"},"destination_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Type"},"targeting":{"additionalProperties":true,"type":"object","title":"Targeting","default":{}},"attribution_spec":{"items":{},"type":"array","title":"Attribution Spec","default":[]},"start_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Time"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time"},"created_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Time"},"updated_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Time"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","required":["id","meta_ad_account_id","meta_campaign_id","external_ad_set_id","external_campaign_id","name","status","effective_status","optimization_goal","billing_event","bid_strategy","daily_budget","lifetime_budget","destination_type","start_time","end_time","created_time","updated_time","last_synced_at"],"title":"MetaAdSetOut"},"MetaAdsActionDayOut":{"properties":{"metric_date":{"type":"string","format":"date","title":"Metric Date"},"action_type":{"type":"string","title":"Action Type"},"value":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Value","default":"0"}},"type":"object","required":["metric_date","action_type"],"title":"MetaAdsActionDayOut","description":"One action type's count on one day.\n\nSparse on purpose: only days the type actually happened on are returned.\n`by_day` is zero-filled and carries every date in the range, so a client\nplotting a trend already has the axis and fills the gaps from it -- which\nis a great deal cheaper than sending a dozen action types x ninety days\nof mostly zeroes."},"MetaAdsActionDimensionOut":{"properties":{"dimension":{"type":"string","title":"Dimension"},"action_type":{"type":"string","title":"Action Type"},"value":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Value","default":"0"}},"type":"object","required":["dimension","action_type"],"title":"MetaAdsActionDimensionOut","description":"One action type's count inside one value of the requested split.\n\nThe conversions half of `by_dimension`. Meta will not combine two row\nbreakdowns, so this is always the single `breakdown_set` that was asked\nfor, and its rows are a separate reading of the same days rather than a\nfiner cut of the undivided ones -- which is why nothing may add these to\n`actions`."},"MetaAdsActionTotalOut":{"properties":{"action_type":{"type":"string","title":"Action Type"},"value":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Value","default":"0"},"action_value":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Action Value"},"cost_per_action":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Per Action"}},"type":"object","required":["action_type"],"title":"MetaAdsActionTotalOut"},"MetaAdsConversionBucketOut":{"properties":{"value":{"type":"string","title":"Value"},"count":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Count","default":"0"}},"type":"object","required":["value"],"title":"MetaAdsConversionBucketOut","description":"One bucket of a conversion split, for one action type."},"MetaAdsConversionSplitOut":{"properties":{"action_breakdown":{"type":"string","title":"Action Breakdown"},"rows":{"type":"integer","title":"Rows","default":0},"rows_in_account":{"type":"integer","title":"Rows In Account","default":0},"status":{"type":"string","title":"Status"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"by_action_type":{"additionalProperties":{"items":{"$ref":"#/components/schemas/MetaAdsConversionBucketOut"},"type":"array"},"type":"object","title":"By Action Type"}},"type":"object","required":["action_breakdown","status"],"title":"MetaAdsConversionSplitOut","description":"One *action* breakdown, and why it looks the way it does.\n\n`coverage` beside it answers the same question for the row breakdowns, and\nthe two are deliberately separate rather than one list. A row breakdown\ndivides the day into more rows; an action breakdown divides the\nconversions inside a row, so the counts, the reasons for being empty and\nthe chart it feeds are all different things. Folding them together would\nmake one field answer two questions, which is the mistake the coverage\narray exists to undo.\n\nThe vocabulary is the same on purpose, so a reader meets one set of words\nhowever a split was asked for, and both are printed in the same panel.\n\n**What this cannot be charted as** is a share of all conversions. A split\nis complete *within* an action type — Meta's buckets sum to that type's\nundivided count exactly — and silent about the types the dimension does\nnot reach. So a card picks an action type first; pooling them would drop\nthe missing types with nothing on screen to say so."},"MetaAdsCoverageOut":{"properties":{"breakdown_set":{"type":"string","title":"Breakdown Set"},"rows":{"type":"integer","title":"Rows","default":0},"rows_in_account":{"type":"integer","title":"Rows In Account","default":0},"status":{"type":"string","title":"Status"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"retention_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Retention Months"},"earliest_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Earliest Date"},"clamped_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Clamped From"}},"type":"object","required":["breakdown_set","status"],"title":"MetaAdsCoverageOut","description":"One split, and why it looks the way it does.\n\nExists because every way a split can come back empty produces the same\nempty list, and they do not mean the same thing. Meta refusing a dimension\nfor this account, an account with no catalog attached, a period older than\nMeta keeps hours for, and a week when nothing ran all render as nothing at\nall — so a reader is left to guess which, and the most common guess is\nthat Pullsy is broken.\n\nOne entry per split, present whether or not it has rows, so a client can\nsay the same sentence for a card it draws and a card it cannot."},"MetaAdsDayOut":{"properties":{"metric_date":{"type":"string","format":"date","title":"Metric Date"},"impressions":{"type":"integer","title":"Impressions","default":0},"reach":{"type":"integer","title":"Reach","default":0},"clicks":{"type":"integer","title":"Clicks","default":0},"spend":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Spend","default":"0"}},"type":"object","required":["metric_date"],"title":"MetaAdsDayOut","description":"One day in the range, zero-filled so gaps read as zero rather than absent."},"MetaAdsDeliverySpanOut":{"properties":{"first_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"First Date"},"last_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Last Date"},"days":{"type":"integer","title":"Days","default":0}},"type":"object","title":"MetaAdsDeliverySpanOut","description":"The days this account delivered on, ignoring the requested range.\n\nExists so \"nothing here\" can be followed by \"it is over there\". The\nperiod-scoped `first_delivery_date` goes null exactly when a reader most\nneeds to know where the data is, and an empty screen that cannot point\nanywhere is the page-level version of a silently skipped split.\n\nIt is what Pullsy has *stored*, not everything the account ever ran: the\nplan's history limit and Meta's retention both bound it."},"MetaAdsDerivedOut":{"properties":{"ctr":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Ctr"},"cpc":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cpc"},"cpm":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cpm"},"link_ctr":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Link Ctr"},"link_cpc":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Link Cpc"}},"type":"object","title":"MetaAdsDerivedOut","description":"Ratios recomputed from the totals, never averaged from stored rows.\n\nMeta returns ctr/cpc/cpm per row and Pullsy stores them verbatim. Averaging\nthose is wrong twice over: a mean of ratios is not the ratio of the sums,\nand the fields are absent on rows with no delivery, so a mean silently\nreports part of the period as if it were the whole."},"MetaAdsDimensionOut":{"properties":{"dimension":{"type":"string","title":"Dimension"},"publisher_platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publisher Platform"},"platform_position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Position"},"age":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Age"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id"},"asset_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Label"},"asset_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Url"},"hour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hour"},"frequency_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency Value"},"impressions":{"type":"integer","title":"Impressions","default":0},"clicks":{"type":"integer","title":"Clicks","default":0},"reach":{"type":"integer","title":"Reach","default":0},"spend":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Spend","default":"0"}},"type":"object","required":["dimension"],"title":"MetaAdsDimensionOut","description":"One value of the active breakdown, totalled over the period."},"MetaAdsEntityOut":{"properties":{"external_id":{"type":"string","title":"External Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"effective_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Status"},"impressions":{"type":"integer","title":"Impressions","default":0},"clicks":{"type":"integer","title":"Clicks","default":0},"spend":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Spend","default":"0"},"inline_link_clicks":{"type":"integer","title":"Inline Link Clicks","default":0},"share_of_spend":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Share Of Spend"},"cpm":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cpm"},"link_ctr":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Link Ctr"},"link_cpc":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Link Cpc"},"landing_page_views":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Landing Page Views","default":"0"},"add_to_cart":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Add To Cart","default":"0"},"initiate_checkout":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Initiate Checkout","default":"0"},"purchases":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Purchases","default":"0"},"purchase_value":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Purchase Value"},"cost_per_purchase":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Per Purchase"},"roas":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Roas"}},"type":"object","required":["external_id"],"title":"MetaAdsEntityOut","description":"One campaign, ad set or ad, totalled over the period.\n\nExists because every other figure in the summary aggregates *across*\nentities, which is exactly the information the level was chosen to see.\nAt `level=campaign` the split charts add all the campaigns together and\nhand back the account; this is the comparison between them."},"MetaAdsPeriodBucketOut":{"properties":{"frequency_value":{"type":"string","title":"Frequency Value"},"reach":{"type":"integer","title":"Reach","default":0}},"type":"object","required":["frequency_value"],"title":"MetaAdsPeriodBucketOut","description":"One frequency bucket, counted over the whole period rather than per day.\n\nThe difference from the daily reading is the whole of Tier 2.5: somebody\nwho saw the ad once a day for nine days is bucket \"1\" nine times there and\n\"6-10\" once here, and only the second is the fatigue the card asks about.\nBecause each person falls in exactly one bucket over one period, these do\nadd up — unlike the daily buckets, which count the same person again on\nevery day they were reached."},"MetaAdsPeriodOut":{"properties":{"window_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Window Start"},"window_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Window End"},"window_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Window Days"},"reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reach"},"frequency":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Frequency"},"cpp":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cpp"},"unique_link_clicks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unique Link Clicks"},"unique_link_ctr":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Unique Link Ctr"},"impressions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Impressions"},"distribution":{"items":{"$ref":"#/components/schemas/MetaAdsPeriodBucketOut"},"type":"array","title":"Distribution","default":[]},"available_windows":{"items":{"$ref":"#/components/schemas/MetaAdsPeriodWindowOut"},"type":"array","title":"Available Windows","default":[]},"status":{"type":"string","title":"Status"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["status"],"title":"MetaAdsPeriodOut","description":"The deduplicated metrics, measured over the selected period itself.\n\nExists because reach cannot be summed. Every other figure in this response\nis built by adding stored daily rows together, which is right for spend and\nimpressions and wrong for reach, frequency and cpp — somebody reached on\nfive days is five rows and one person. So the period reading is fetched\nfrom Meta over the period, stored in its own table, and served here.\n\n**It is exact-match or nothing.** A figure appears only when the requested\nrange equals a stored window's bounds exactly — never the nearest window,\nnever the one containing it. A reader must never be shown a period reach\nthat silently means a different period from the one they selected, and the\nonly defence against that is refusing to approximate. When there is no\nmatching window, `status` and `note` say why and\n:class:`MetaAdsReachOut`'s busiest-day figure remains the honest fallback."},"MetaAdsPeriodWindowOut":{"properties":{"name":{"type":"string","title":"Name"},"window_start":{"type":"string","format":"date","title":"Window Start"},"window_end":{"type":"string","format":"date","title":"Window End"},"window_days":{"type":"integer","title":"Window Days"},"reach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reach"}},"type":"object","required":["name","window_start","window_end","window_days"],"title":"MetaAdsPeriodWindowOut","description":"One window this account holds a period reading for.\n\nOffered when the selected range has none, so \"reach cannot be derived for\na custom range\" comes with the ranges it can be derived for."},"MetaAdsReachOut":{"properties":{"max_day":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Day"},"max_day_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Max Day Date"},"frequency_on_max_day":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Frequency On Max Day"}},"type":"object","title":"MetaAdsReachOut","description":"Reach as the busiest single day — the reading daily rows can support.\n\nReach is deduplicated per person, so it cannot be summed across days or\nacross breakdown rows. No total is offered here, and the field a reader\nwould misuse is simply not present: the busiest single day is what stored\ndaily rows can honestly say, and it was for a long time all Pullsy could\noffer for a period.\n\nIt is no longer the only reading — :class:`MetaAdsPeriodOut` carries the\nperiod figure, fetched from Meta over the period itself — but it is not\nreplaced by it either. The period figure exists only for a range that\nexactly matches a stored window, so this stays as the answer for every\nother range, and the two sit side by side rather than one shadowing the\nother."},"MetaAdsResultsOut":{"properties":{"results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Results"},"indicator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Indicator"},"cost_per_result":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Per Result"},"status":{"type":"string","title":"Status","default":"not_reported"},"indicators":{"items":{"type":"string"},"type":"array","title":"Indicators","default":[]},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"MetaAdsResultsOut","description":"The figure Meta's own UI headlines, or why there is not one.\n\n`results` is whichever metric a campaign optimised for, so a total is only\na number when every row in the range optimised for the same thing. That is\nnot a nicety: asked for a row spanning several objectives, **Meta itself\nreports `objective: MULTIPLE` and returns no result at all** rather than\nadding link clicks to messaging conversations. This endpoint is not more\ngenerous than the API it reads.\n\nSo the sum is served only alongside the single `indicator` it is a sum of,\nand the mixed case is named rather than added up. Same discipline as\n:class:`MetaAdsPeriodOut`: a figure that would mean something other than\nits label is not shown."},"MetaAdsShoppingOut":{"properties":{"steps":{"items":{"$ref":"#/components/schemas/MetaAdsShoppingStepOut"},"type":"array","title":"Steps","default":[]},"purchase_value":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Purchase Value"},"roas":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Roas"},"click_to_landing_page_view_rate":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Click To Landing Page View Rate"}},"type":"object","title":"MetaAdsShoppingOut","description":"Meta's own view of the website funnel: platform-claimed, context only.\n\nEvery platform claims some of the same sales, so none of this is ever\nadded to another platform's numbers or to the store's sales."},"MetaAdsShoppingStepOut":{"properties":{"key":{"type":"string","enum":["landing_page_views","view_content","add_to_cart","initiate_checkout","purchase"],"title":"Key"},"action_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Type"},"count":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Count","default":"0"},"cost_per":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cost Per"}},"type":"object","required":["key"],"title":"MetaAdsShoppingStepOut","description":"One step of the website funnel as Meta's pixel credits it to the ads.\n\n`action_type` names the one Meta action the count is read from, never a\nsum: Meta reports the same purchase as `offsite_conversion.fb_pixel_purchase`,\n`purchase` and `omni_purchase`, so adding them would count it three times.\nNull with a zero count when the account reports none of them."},"MetaAdsSummaryOut":{"properties":{"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"days_in_range":{"type":"integer","title":"Days In Range"},"days_with_delivery":{"type":"integer","title":"Days With Delivery"},"first_delivery_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"First Delivery Date"},"last_delivery_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Last Delivery Date"},"totals":{"$ref":"#/components/schemas/MetaAdsTotalsOut"},"reach":{"$ref":"#/components/schemas/MetaAdsReachOut"},"period":{"$ref":"#/components/schemas/MetaAdsPeriodOut"},"results":{"$ref":"#/components/schemas/MetaAdsResultsOut"},"conversion_splits":{"items":{"$ref":"#/components/schemas/MetaAdsConversionSplitOut"},"type":"array","title":"Conversion Splits"},"derived":{"$ref":"#/components/schemas/MetaAdsDerivedOut"},"by_day":{"items":{"$ref":"#/components/schemas/MetaAdsDayOut"},"type":"array","title":"By Day","default":[]},"by_dimension":{"items":{"$ref":"#/components/schemas/MetaAdsDimensionOut"},"type":"array","title":"By Dimension","default":[]},"by_set":{"additionalProperties":{"items":{"$ref":"#/components/schemas/MetaAdsDimensionOut"},"type":"array"},"type":"object","title":"By Set"},"by_entity":{"items":{"$ref":"#/components/schemas/MetaAdsEntityOut"},"type":"array","title":"By Entity"},"entities_without_delivery":{"type":"integer","title":"Entities Without Delivery","default":0},"entities_with_spend":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entities With Spend"},"largest_entity_share":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Largest Entity Share"},"shopping":{"$ref":"#/components/schemas/MetaAdsShoppingOut"},"actions":{"items":{"$ref":"#/components/schemas/MetaAdsActionTotalOut"},"type":"array","title":"Actions","default":[]},"actions_by_day":{"items":{"$ref":"#/components/schemas/MetaAdsActionDayOut"},"type":"array","title":"Actions By Day","default":[]},"actions_by_dimension":{"items":{"$ref":"#/components/schemas/MetaAdsActionDimensionOut"},"type":"array","title":"Actions By Dimension","default":[]},"available_metrics":{"items":{"type":"string"},"type":"array","title":"Available Metrics","default":[]},"coverage":{"items":{"$ref":"#/components/schemas/MetaAdsCoverageOut"},"type":"array","title":"Coverage"},"delivery_span":{"$ref":"#/components/schemas/MetaAdsDeliverySpanOut"}},"type":"object","required":["days_in_range","days_with_delivery","totals","reach","period","results","derived"],"title":"MetaAdsSummaryOut","description":"Everything the overview needs, in one correct answer.\n\nExists because the list endpoints are paginated: summing a page of 50 rows\nout of 336 gives a total that is confidently wrong, and the error grows\nsilently with the date range."},"MetaAdsTotalsOut":{"properties":{"impressions":{"type":"integer","title":"Impressions","default":0},"clicks":{"type":"integer","title":"Clicks","default":0},"unique_clicks":{"type":"integer","title":"Unique Clicks","default":0},"inline_link_clicks":{"type":"integer","title":"Inline Link Clicks","default":0},"spend":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Spend","default":"0"}},"type":"object","title":"MetaAdsTotalsOut","description":"Period totals. Only additive metrics live here — see MetaAdsSummaryOut."},"MetaCampaignOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"meta_ad_account_id":{"type":"string","format":"uuid","title":"Meta Ad Account Id"},"external_campaign_id":{"type":"string","title":"External Campaign Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"effective_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Status"},"objective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Objective"},"buying_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buying Type"},"bid_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid Strategy"},"daily_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Budget"},"lifetime_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lifetime Budget"},"budget_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Remaining"},"start_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Time"},"stop_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Stop Time"},"created_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Time"},"updated_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Time"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","required":["id","meta_ad_account_id","external_campaign_id","name","status","effective_status","objective","buying_type","bid_strategy","daily_budget","lifetime_budget","budget_remaining","start_time","stop_time","created_time","updated_time","last_synced_at"],"title":"MetaCampaignOut"},"OAuthStartOut":{"properties":{"authorization_url":{"type":"string","title":"Authorization Url"},"provider":{"type":"string","title":"Provider"}},"type":"object","required":["authorization_url","provider"],"title":"OAuthStartOut"},"OAuthStartRequest":{"properties":{"return_to":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Return To"},"reconnect_connection_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reconnect Connection Id"},"automation":{"type":"boolean","title":"Automation","default":false},"return_app":{"type":"string","enum":["web","store"],"title":"Return App","default":"web"},"shop":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Shop"}},"type":"object","title":"OAuthStartRequest"},"Page_InstagramAccountMetricOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramAccountMetricOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramAccountMetricOut]"},"Page_InstagramAccountOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramAccountOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramAccountOut]"},"Page_InstagramMediaMetricOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramMediaMetricOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramMediaMetricOut]"},"Page_InstagramMediaOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramMediaOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramMediaOut]"},"Page_InstagramMediaPerformanceOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramMediaPerformanceOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramMediaPerformanceOut]"},"Page_InstagramMediaSnapshotOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramMediaSnapshotOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramMediaSnapshotOut]"},"Page_InstagramStoryMetricOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramStoryMetricOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramStoryMetricOut]"},"Page_InstagramStoryOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramStoryOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramStoryOut]"},"Page_InstagramStoryPerformanceOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramStoryPerformanceOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramStoryPerformanceOut]"},"Page_InstagramStorySnapshotOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InstagramStorySnapshotOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[InstagramStorySnapshotOut]"},"Page_MetaAdAccountOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MetaAdAccountOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[MetaAdAccountOut]"},"Page_MetaAdActionOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MetaAdActionOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[MetaAdActionOut]"},"Page_MetaAdInsightOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MetaAdInsightOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[MetaAdInsightOut]"},"Page_MetaAdOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MetaAdOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[MetaAdOut]"},"Page_MetaAdSetOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MetaAdSetOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[MetaAdSetOut]"},"Page_MetaCampaignOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MetaCampaignOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[MetaCampaignOut]"},"Page_SyncJobOut_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SyncJobOut"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"Page[SyncJobOut]"},"Pagination":{"properties":{"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["page","limit","has_more"],"title":"Pagination"},"SyncJobOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"},"provider":{"type":"string","title":"Provider"},"resource_type":{"type":"string","title":"Resource Type"},"sync_type":{"type":"string","title":"Sync Type"},"trigger":{"type":"string","title":"Trigger"},"status":{"type":"string","title":"Status"},"attempt":{"type":"integer","title":"Attempt"},"max_attempts":{"type":"integer","title":"Max Attempts"},"scheduled_for":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled For"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"records_processed":{"type":"integer","title":"Records Processed"},"records_created":{"type":"integer","title":"Records Created"},"records_updated":{"type":"integer","title":"Records Updated"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"stats":{"additionalProperties":true,"type":"object","title":"Stats"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","connection_id","provider","resource_type","sync_type","trigger","status","attempt","max_attempts","scheduled_for","started_at","completed_at","records_processed","records_created","records_updated","error_code","error_message","created_at","updated_at"],"title":"SyncJobOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"connections","description":"Connect an Instagram or X account, inspect it, disconnect it, and start a sync."},{"name":"instagram","description":"Normalized Instagram accounts, media and metrics."},{"name":"sync","description":"Synchronization jobs and their status."},{"name":"usage","description":"The limits your plan grants and what you have used."},{"name":"health","description":"Liveness and readiness."}]}