Ads

Facebook advertising, on the same connection as Pages. These are platform-specific routes rather than a normalized surface: campaign structure has no equivalent on the other providers Adeli covers.

Every endpoint needs a Facebook connection whose authorization includes the ads permissions. A connection made before those were requested keeps working for Pages and answers 403 ads_permission_required here, with the missing scopes in error.details.missingScopes; the fix is another authorization, not a repair.

Campaign and metric reads are live. Adeli stores no campaign structure and no metrics, so every figure is as fresh as that response. The one exception is the list of ad accounts, which is reused for up to 15 minutes.

When Meta throttles a request, the response is 429 rate_limited with a Retry-After header, error.details.retryAfterSeconds (Meta's own estimate when it gives one, otherwise a minute) and error.details.limit: app when the app's hourly call budget for this connection is spent, ad_account when that ad account's own budget is.

When Meta refuses a request and explains why, the response is 422 provider_rejected with Meta's explanation in error.message — for example that a Business portfolio has reached its limit of ad accounts.

Endpoints