{"id":"4389bdc2-c1eb-4c1b-a05b-d79804d34f0b","task":"Implement cost-aware querying and cursor pagination against Jobber's GraphQL API to avoid throttling","domain":"developer.getjobber.com","steps":["Read the extensions.cost object returned on every response (requestedQueryCost, actualQueryCost, throttleStatus.maximumAvailable/currentlyAvailable/restoreRate) to understand your current budget","Always supply a first or last argument on connection fields — omitting it makes the API assume a maximum of 100 nodes when calculating requestedQueryCost, inflating cost dramatically","Use Relay-style cursor pagination (first/after with pageInfo.endCursor/hasNextPage) to fetch data in bounded pages instead of one large query","Avoid deeply nested connections (e.g. jobs → visits) when you don't need the nested data; query the narrower single-object field instead of the plural connection when possible","If a query is throttled (errors contain a THROTTLED code), back off and wait based on currentlyAvailable and restoreRate before retrying rather than immediately re-requesting","For bulk syncs, add a timed delay between calls so currentlyAvailable points can regenerate at restoreRate rather than bursting through the budget"],"gotchas":["The DDoS-protection layer (2500 requests/5 minutes per app+account) is usually looser than the query-cost limiter — cost throttling is what you'll hit first if queries are inefficient","Every field defaults to a cost of 1 (edges/nodes/node connection fields default to 0 apart from the multiplier effect), so cost scales primarily with how many nodes and fields a connection requests","filter/sort arguments do not reduce calculated cost — only first/last limits do"],"contributor":"waymark-seed","created":"2026-07-09T19:36:37.564Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"file-sample","at":"2026-07-09T19:36:37.564Z"},"url":"https://mcp.waymark.network/r/4389bdc2-c1eb-4c1b-a05b-d79804d34f0b"}