Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a minimal working Canva Connect API example. Use when starting a new Canva integration, testing your setup, or learning basic Canva REST API patterns. Trigger with phrases like "canva hello world", "canva example", "canva quick start", "simple canva code".
.claude/skills/jeremylongshore-canva-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 25% | 0% |
Prove the smallest safe path first. A successful identity or profile read confirms connectivity and authorization shape but does not authorize design creation, export, assets, or other scopes.
Use Read and Grep to verify token exchange and storage stay server-side, the target base URL is exact, and no credential appears in client code.
Choose the minimum users/me or profile request supported by the granted explicit scope. Do not add design-write scopes for this proof.
Use the existing reviewed HTTP adapter and a bounded timeout. Do not print the Authorization header, response body, email, profile, or token metadata.
Check status, content type, required response envelope, and only the minimum opaque identity field needed for correlation.
Separate transport, invalid token, missing explicit scope, revoked consent, malformed response, and provider error using the redacted envelope.
Use Write or Edit to save integration/config version, endpoint pattern, status category, schema result, latency bucket, and redaction check.
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 new staging integration performs one users/me request for its dedicated test user and records only HTTP success, schema version, and an opaque internal connection reference.
| Failure | Response | | --- | --- | | Token is client-visible | Stop and move the flow to a backend | | Read returns forbidden | Compare the exact scope and consent; do not add broad scopes blindly | | Response contains unexpected fields | Reject or ignore according to the pinned schema | | Proof requires a write | Redesign it around a supported non-mutating request |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 19,408 | 8,050 | -59% | 1 | 1 | 0% | 2,612 | 3,185 | +22% | 0 | 0 | — |
case-02 | pass→pass | 15,550 | 12,303 | -21% | 1 | 1 | 0% | 3,425 | 4,299 | +26% | 0 | 0 | — |
case-03 | fail→pass | 19,512 | 13,273 | -32% | 1 | 1 | 0% | 4,170 | 4,272 | +2% | 0 | 0 | — |
case-04 | pass→pass | 15,249 | 12,508 | -18% | 1 | 1 | 0% | 3,217 | 4,229 | +31% | 0 | 0 | — |
case-05 | pass→pass | 12,829 | 12,656 | -1% | 1 | 1 | 0% | 2,490 | 3,600 | +45% | 0 | 0 | — |
case-06 | pass→pass | 21,799 | 13,868 | -36% | 1 | 1 | 0% | 2,590 | 4,406 | +70% | 0 | 0 | — |
case-07 | pass→pass | 12,038 | 7,757 | -36% | 1 | 1 | 0% | 2,142 | 2,763 | +29% | 0 | 0 | — |
case-08 | fail→fail | 9,274 | 6,357 | -31% | 1 | 1 | 0% | 1,632 | 2,630 | +61% | 0 | 0 | — |
case-09 | fail→pass | 7,504 | 3,180 | -58% | 1 | 1 | 0% | 1,470 | 2,035 | +38% | 0 | 0 | — |
case-10 | pass→pass | 7,235 | 3,712 | -49% | 1 | 1 | 0% | 1,378 | 2,150 | +56% | 0 | 0 | — |
case-11 | pass→pass | 6,641 | 4,916 | -26% | 1 | 1 | 0% | 1,279 | 2,464 | +93% | 0 | 0 | — |
case-24 | pass→pass | 4,842 | 3,643 | -25% | 1 | 1 | 0% | 674 | 2,056 | +205% | 0 | 0 | — |
case-12 | fail→pass | 9,864 | 6,848 | -31% | 1 | 1 | 0% | 1,859 | 2,679 | +44% | 0 | 0 | — |
case-13 | fail→pass | 10,206 | 4,625 | -55% | 1 | 1 | 0% | 1,753 | 2,192 | +25% | 0 | 0 | — |
case-14 | pass→pass | 19,438 | 7,884 | -59% | 1 | 1 | 0% | 2,192 | 2,909 | +33% | 0 | 0 | — |
case-15 | pass→pass | 8,314 | 5,772 | -31% | 1 | 1 | 0% | 1,397 | 2,385 | +71% | 0 | 0 | — |
case-16 | fail→pass | 6,074 | 2,360 | -61% | 1 | 1 | 0% | 981 | 1,752 | +79% | 0 | 0 | — |
case-17 | fail→fail | 10,531 | 7,566 | -28% | 1 | 1 | 0% | 1,726 | 2,590 | +50% | 0 | 0 | — |
case-18 | pass→pass | 10,518 | 3,031 | -71% | 1 | 1 | 0% | 2,018 | 1,976 | -2% | 0 | 0 | — |
case-19 | pass→pass | 3,745 | 2,177 | -42% | 1 | 1 | 0% | 498 | 1,669 | +235% | 0 | 0 | — |
case-20 | pass→pass | 11,001 | 8,384 | -24% | 1 | 1 | 0% | 1,808 | 2,888 | +60% | 0 | 0 | — |
case-21 | pass→pass | 9,604 | 5,362 | -44% | 1 | 1 | 0% | 1,569 | 2,448 | +56% | 0 | 0 | — |
case-22 | pass→pass | 4,551 | 3,406 | -25% | 1 | 1 | 0% | 746 | 2,006 | +169% | 0 | 0 | — |
case-23 | pass→pass | 8,388 | 5,072 | -40% | 1 | 1 | 0% | 1,349 | 2,242 | +66% | 0 | 0 | — |
case-25 | pass→pass | 6,019 | 5,413 | -10% | 1 | 1 | 0% | 1,160 | 2,262 | +95% | 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. 25 cases were attempted. The headline lift of +24 percentage points is the difference between those two pass rates over the 25 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.