Canva Reconciliation and Recovery
Overview
Reliability begins with knowing whether an operation happened. Reconcile existing resources and jobs before replaying a mutation, and keep credential rotation outside generic request retries.
Prerequisites
- Operation types, retry classifications, and duplicate impact
- Durable identity/job ledger and terminal-state contract
- Endpoint/user queues, time budgets, alert owner, and rollback
Instructions
Step 1: Classify operations
Use Read and Grep to label safe read, token exchange, mutating submission, job poll, webhook delivery, and cleanup. Define retriable errors per operation.
Step 2: Persist before dispatch
Create one application operation record with tenant/resource authorization and intended effect before sending a mutating request.
Step 3: Handle ambiguous failure
After timeout or connection loss, use returned or recoverable identity to query existing state. Never blindly recreate a design, export, upload, or autofill.
Step 4: Poll bounded jobs
Apply exponential backoff with jitter to the same job, stop at local deadline, continue later from durable state, and handle success/failed plus unknown future states safely.
Step 5: Serialize credential refresh
Single-flight by Canva user, atomically store the returned replacement refresh token, wake waiting requests on success, and reauthorize rather than looping invalid credentials.
Step 6: Use scoped circuits and dead letters
Open by endpoint/failure class, preserve operations with reconciliation state, and require an owner before replay. Do not mix authorization failures with provider availability.
Step 7: Prove recovery
Use Write or Edit to test restart, duplicate delivery, lost response, throttling, terminal failure, refresh race, circuit recovery, and dead-letter replay.
Authentication
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.
Tool Discipline
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.
Output
- Scoped decision or implementation artifact
- Redacted operation and validation receipt
- Failure, rollback, and follow-up ownership record
Examples
A network timeout follows export submission. The worker retains the operation and job reference, resumes polling after restart, and never submits a second export merely because the response was uncertain.
Error Handling
| Failure | Response |
|---|---|
| No identity survived timeout | Stop automatic replay and investigate manually |
| Refresh token was reused | Require reauthorization and fix atomic rotation |
| Circuit hides authorization errors | Split failure classes and deny affected requests |
| Dead letter lacks owner/state | Do not replay it |