GraphQL
One document per resource, POSTed as `{query, operationName, variables}`.
errors[] is an error, even with HTTP 200
If the response carries a non-empty errors[], the work item fails. That is the default and it is the
right default: partial data silently loaded is worse than a failed run. Set partial_data: accept to
yield the rows anyway and record the error as a warning event.
Pagination and cost
relay pagination reads pageInfo.hasNextPage / endCursor and re-issues with after.
offset_variables covers offset-style schemas. When the schema exposes a query cost, cost_path feeds
the rate limiter directly, so Ingest slows down before the API starts rejecting it.
Data path
$.data.<field>.edges[*].node is supported, where [*] expands arrays and .node unwraps. Plain
lists work too. Introspection is an authoring-time tool only; it never runs during a pipeline.
Credential proof
Introspection, or a trivial query.