C

StableDesign — MPP Grade C

Preview responses and set spending limits for this service through use.mpp.land Free budget controls, response samples, and reliability routing.

On-chain Activity

3 Total txs
3 7d txs
$0.03 7d volume
$0.03 Total volume
1 Unique payers
0 Unique clients
7-day activity ▁▁▁▁▁▁█

Compliance Checks

All paid ops declare 402 response MUST 10pt
All x-payment-info valid MUST 10pt
- Challenge has Cache-Control: no-store MUST 5pt
- Challenge digest on POST SHOULD 3pt
- Challenge has expires SHOULD 3pt
- Challenge has Problem Details SHOULD 2pt
- Challenge has required params MUST 5pt
- Challenge has WWW-Authenticate MUST 5pt
Challenge returns 402 MUST 10pt
Correct Content-Type MUST 5pt
Has Cache-Control on discovery SHOULD 5pt
Has input schemas SHOULD 5pt
Has llms.txt SHOULD 5pt
Has /openapi.json at root MUST 10pt
Has required top-level fields MUST 10pt
Served over HTTPS MUST 10pt
Uses standard categories SHOULD 2pt
1 issue
  • Endpoint GET /api/health returned 200 without payment

Paid Operations (9)

GET /api/health dynamic
Health check
Amount
map[amount:0 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Parameters

NameInTypeRequiredDescription
verbose query boolean No Include detailed service info

Response Schema (200)

FieldTypeDescription
status string -
timestamp string (date-time) -
GET /api/oauth/authorize dynamic
Start Canva OAuth flow (browser redirect)

Redirects the user to Canva's authorization page. Must be opened in a browser. Sets a PKCE verifier cookie for the callback.

Amount
map[amount:0 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Parameters

NameInTypeRequiredDescription
redirect_uri query string No Override the default OAuth redirect URI
GET /api/oauth/callback dynamic
Canva OAuth callback

Handles the OAuth callback from Canva. Exchanges the authorization code for an access token and stores it server-side.

Amount
map[amount:0 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Parameters

NameInTypeRequiredDescription
code query string Yes Authorization code from Canva
GET /api/user dynamic
Get authenticated Canva user profile

Returns the Canva user profile for the current OAuth session.

Amount
map[amount:0 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Parameters

NameInTypeRequiredDescription
fields query string No Comma-separated list of fields to return

Response Schema (200)

FieldTypeDescription
team_id string -
user_id string -
POST /api/designs/create dynamic
Create a new Canva design

Creates a design from a preset type (doc, email, presentation, whiteboard), custom dimensions (40-8000px), or with an uploaded asset. Requires Canva OAuth.

Amount
map[amount:0.010000 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0.010000 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Input Schema

FieldTypeRequiredDescription
asset_id string No Canva asset ID to insert into the design
height integer No Custom height in pixels
preset string No Design preset type
enum: doc, email, presentation, whiteboard
title string No Design title
width integer No Custom width in pixels
POST /api/designs/get dynamic
Get design details by ID

Retrieves metadata, URLs, and details for a specific Canva design. Requires Canva OAuth.

Amount
map[amount:0.010000 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0.010000 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Input Schema

FieldTypeRequiredDescription
design_id string Yes Canva design ID
GET /api/designs/list dynamic
List user's Canva designs

Lists designs with optional filtering by ownership and sorting. Supports pagination via continuation token. Requires Canva OAuth.

Amount
map[amount:0.010000 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0.010000 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Parameters

NameInTypeRequiredDescription
continuation query string No Pagination continuation token
ownership query string No Filter by ownership type
sort_by query string No Sort order for results
POST /api/designs/export dynamic
Export a Canva design to file

Exports a design to PDF, JPG, PNG, GIF, PPTX, or MP4. Not all formats work with all design types — use PDF as the safe default. Async with automatic polling (up to 30s). Export URLs expire after 24 hours. Requires Canva OAuth.

Amount
map[amount:0.020000 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0.020000 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Input Schema

FieldTypeRequiredDescription
design_id string Yes Canva design ID
format object Yes
POST /api/assets/upload dynamic
Upload an image or video asset to Canva

Uploads an asset by URL. Supports JPEG, PNG, GIF, WebP, HEIC, TIFF (50MB max) and MP4, WebM, MKV (500MB max). Async with automatic polling (up to 15s). Requires Canva OAuth.

Amount
map[amount:0.010000 currency:USD mode:fixed]
Currency
-
Method
Intent
-
402 Declared
Yes
Non-standard x-payment-info fields: price: map[amount:0.010000 currency:USD mode:fixed] protocols: [map[x402:map[]] map[mpp:map[currency:0x20c000000000000000000000b9537d11c60e8b50 intent:charge method:tempo]]]

Input Schema

FieldTypeRequiredDescription
name string Yes Asset name
url string (uri) Yes Public URL of the image or video to upload

Payment Methods

Methods
-
Intents
-
Currencies (discovery)
-
Multiple Challenges
No

Security

TLS Version
TLSv1.3
Challenge ID Unique
-
Challenge ID Length
-
Digest Binding
-

Uptime

Discovery
Reachable (216ms)
Challenge
Reachable (173ms)
Last Checked

Schema Completeness

Paid Operations
9
With Input Schema
4
With Description
9
5 missing schema
  • GET /api/health
  • GET /api/oauth/authorize
  • GET /api/oauth/callback
  • GET /api/user
  • GET /api/designs/list

Documentation

Homepage
-
API Reference
-
llms.txt
-

Discovery

OpenAPI URL
https://stabledesign.vercel.app/openapi.json
OpenAPI Version
3.1.0
Service Version
1.0.0
Document Size
10415 bytes
Document Hash
a1f14410cd348ab0fc86fce7b35ac97f7ac946373074a734e68cf24431ad97a9

Version History (1 snapshots)

Scan snapshots
Date Grade Score Response Status
2026-05-06 C 67% 551ms Up