Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Optimize Canva Connect API usage costs through efficient API patterns and monitoring. Use when analyzing Canva API usage, reducing unnecessary calls, or implementing usage monitoring and budget tracking. Trigger with phrases like "canva cost", "canva usage", "reduce canva calls", "canva API efficiency", "canva budget".
.claude/skills/jeremylongshore-canva-cost-tuning/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 36% | 0% |
Optimize application behavior, not an imagined universal Canva bill. Use current endpoint metadata, capability/trial responses, and local operation receipts to find duplicate calls, polling waste, and avoidable retries.
Use Read and Grep to count logical operations, provider requests, retries, polling reads, cache hits, failures, and premium-feature responses by endpoint pattern.
Distinguish user reads, metadata reads, mutating submissions, and job-status polling. Never combine them into one cost number.
Persist operation identity before writes, coalesce concurrent reads where safe, and reconcile existing jobs before resubmission.
Apply bounded exponential backoff to existing asynchronous jobs and stop at the application timeout without creating replacements.
Cache only policy-approved metadata with explicit freshness and authorization invalidation. Never cache tokens or signed result URLs as durable content.
Use Write or Edit to record baseline, selected control, expected impact, experiment window, rollback threshold, and measured result.
Canva Connect calls use Bearer access tokens obtained by a backend through OAuth 2.0 Authorization Code with SHA-256 PKCE. Request explicit least-privilege scopes, keep client secrets and tokens out of browser-visible state, and serialize refresh so the replacement single-use refresh token is stored atomically.
Use Read and Grep for discovery and evidence. Use Write or Edit only for the approved artifact, code, configuration, test, or receipt described by this workflow; do not make an unapproved Canva-side change.
A review finds repeated export submissions caused by request timeouts. The service persists job identity before dispatch and resumes polling, reducing duplicate work without claiming a dollar savings percentage.
| Failure | Response | | --- | --- | | No operation ledger | Add observability before claiming optimization | | Entitlement unknown | Report uncertainty and obtain current tenant evidence | | Cache crosses tenants | Disable it and correct the key/authorization boundary | | Savings based on list price | Replace with measured usage and current contract data |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 24,555 | 16,411 | -33% | 1 | 1 | 0% | 5,214 | 4,888 | -6% | 0 | 0 | — |
case-02 | fail→pass | 16,028 | 13,869 | -13% | 1 | 1 | 0% | 3,020 | 3,725 | +23% | 0 | 0 | — |
case-03 | fail→pass | 18,556 | 13,558 | -27% | 1 | 1 | 0% | 3,476 | 4,057 | +17% | 0 | 0 | — |
case-04 | pass→pass | 14,996 | 9,589 | -36% | 1 | 1 | 0% | 2,288 | 2,779 | +21% | 0 | 0 | — |
case-05 | fail→pass | 15,402 | 9,036 | -41% | 1 | 1 | 0% | 2,673 | 2,859 | +7% | 0 | 0 | — |
case-06 | fail→pass | 12,416 | 9,372 | -25% | 1 | 1 | 0% | 2,097 | 2,852 | +36% | 0 | 0 | — |
case-07 | fail→pass | 9,404 | 6,901 | -27% | 1 | 1 | 0% | 1,636 | 2,494 | +52% | 0 | 0 | — |
case-08 | pass→pass | 7,440 | 3,885 | -48% | 1 | 1 | 0% | 1,150 | 1,835 | +60% | 0 | 0 | — |
case-09 | fail→fail | 12,610 | 11,659 | -8% | 1 | 1 | 0% | 2,100 | 3,369 | +60% | 0 | 0 | — |
case-10 | pass→pass | 12,123 | 5,956 | -51% | 1 | 1 | 0% | 1,824 | 2,199 | +21% | 0 | 0 | — |
case-11 | pass→pass | 12,328 | 10,105 | -18% | 1 | 1 | 0% | 1,927 | 2,988 | +55% | 0 | 0 | — |
case-12 | pass→pass | 14,917 | 8,671 | -42% | 1 | 1 | 0% | 2,346 | 2,874 | +23% | 0 | 0 | — |
case-13 | pass→pass | 9,725 | 6,745 | -31% | 1 | 1 | 0% | 1,507 | 2,257 | +50% | 0 | 0 | — |
case-14 | pass→pass | 15,693 | 16,124 | +3% | 1 | 1 | 0% | 2,894 | 4,323 | +49% | 0 | 0 | — |
case-15 | fail→pass | 11,188 | 4,605 | -59% | 1 | 1 | 0% | 1,847 | 2,043 | +11% | 0 | 0 | — |
case-16 | pass→pass | 13,849 | 14,137 | +2% | 1 | 1 | 0% | 2,593 | 3,804 | +47% | 0 | 0 | — |
case-17 | pass→pass | 13,723 | 7,892 | -42% | 1 | 1 | 0% | 2,165 | 2,654 | +23% | 0 | 0 | — |
case-18 | fail→pass | 14,370 | 9,997 | -30% | 1 | 1 | 0% | 2,265 | 3,038 | +34% | 0 | 0 | — |
case-19 | pass→pass | 9,945 | 5,428 | -45% | 1 | 1 | 0% | 1,576 | 2,038 | +29% | 0 | 0 | — |
case-20 | pass→pass | 10,547 | 8,866 | -16% | 1 | 1 | 0% | 2,351 | 3,100 | +32% | 0 | 0 | — |
case-21 | pass→pass | 14,460 | 13,335 | -8% | 1 | 1 | 0% | 2,883 | 3,873 | +34% | 0 | 0 | — |
case-22 | pass→pass | 17,382 | 18,394 | +6% | 1 | 1 | 0% | 3,171 | 4,798 | +51% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 22 comparable cases.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.