B

Weftly API — MPP Grade B

https://api.weftly.ai 83% (85/102)
aimedia
Preview responses and set spending limits for this service through use.mpp.land Free budget controls, response samples, and reliability routing.

On-chain Activity

9 Total txs
0 7d txs
$0.00 7d volume
$0.09 Total volume
2 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
  • Discovery amount 0.01 != challenge amount 1 on GET /api/test

Paid Operations (5)

GET /api/test 0.01 USDC
MPP smoke test ($0.01 USDC)

Verifies end-to-end MPP payment flow. Charges $0.01 USDC and returns a success confirmation. Optional `echo` query is round-tripped in the response so callers can verify their own request reached the worker.

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

Parameters

NameInTypeRequiredDescription
echo query string No Optional string echoed back in the response, useful for client-side smoke tests.

Response Schema (200)

FieldTypeDescription
echo string -
paid boolean -
service string -
POST /api/v1/jobs 0.50 USDC
Create job with payment options

Creates a job of any supported job_type and returns payment options + the next endpoint to call. Two flow shapes by job_type: 1. **Upload-based** (`transcribe`, `summarize`, `find_clips`): pass `filename` + `content_type`. Response includes Stripe SPT checkout URL and MPP deposit info. After payment, GET /api/v1/jobs/{id}/upload-url, PUT the bytes, then POST /api/v1/jobs/{id}/complete-upload. 2. **No-upload derivatives** (`extract_clip`, `extract_vertical_clip`): pass `source_job_id` + segments (or `start`/`end` for extract_vertical_clip). MPP-only payment (no Stripe). After payment, POST /api/v1/jobs/{id}/process — do NOT call /upload-url or /complete-upload, both will fail. For clip workflows: call `find_clips` ($2.00) once, then `extract_clip` / `extract_vertical_clip` against the find_clips job_id (within its 72h `expires_at`). Do not call `transcribe` first — find_clips includes a transcript.

Amount
0.50
Currency
USDC
Method
tempo
Intent
charge
402 Declared
Yes
Non-standard x-payment-info fields: methods: [map[amount:0.50 currency:USDC intent:charge method:tempo] map[amount:0.50 currency:USD intent:charge method:stripe]] price: map[currency:USD max:2.00 min:0.50 mode:dynamic] protocols: [map[x402:map[]] map[mpp:map[currency:USDC intent:charge method:tempo]]]

Input Schema

{
  "$ref": "#/components/schemas/CreateJobRequest"
}
GET /api/v1/jobs/{id}/upload-url 0.50 USDC
Get presigned upload URL (requires payment)
Amount
0.50
Currency
USDC
Method
tempo
Intent
charge
402 Declared
Yes
Non-standard x-payment-info fields: methods: [map[amount:0.50 currency:USDC intent:charge method:tempo] map[amount:0.50 currency:USD intent:charge method:stripe]] price: map[currency:USD max:2.00 min:0.50 mode:dynamic] protocols: [map[x402:map[]] map[mpp:map[currency:USDC intent:charge method:tempo]]]

Parameters

NameInTypeRequiredDescription
id path string Yes -

Response Schema (200)

{
  "$ref": "#/components/schemas/UploadUrlResponse"
}
POST /api/v1/jobs/{id}/complete-upload 0.50 USDC
Confirm upload and trigger processing (upload-based jobs only)

For upload-based jobs (`transcribe`, `summarize`, `find_clips`) only. Verifies that the file landed in R2 storage and that the job is paid, then triggers processing. Do NOT call this for `extract_clip` / `extract_vertical_clip` — those are no-upload derivative jobs and use POST /api/v1/jobs/{id}/process instead.

Amount
0.50
Currency
USDC
Method
tempo
Intent
charge
402 Declared
Yes
Non-standard x-payment-info fields: methods: [map[amount:0.50 currency:USDC intent:charge method:tempo] map[amount:0.50 currency:USD intent:charge method:stripe]] price: map[currency:USD max:2.00 min:0.50 mode:dynamic] protocols: [map[x402:map[]] map[mpp:map[currency:USDC intent:charge method:tempo]]]

Parameters

NameInTypeRequiredDescription
id path string Yes -

Response Schema (200)

{
  "$ref": "#/components/schemas/CompleteUploadResponse"
}
POST /api/v1/jobs/{id}/process 0.50 USDC
Verify payment and trigger processing for a no-upload derivative job

For no-upload derivative jobs (`extract_clip`, `extract_vertical_clip`) only. Verifies the MPP payment and triggers processing in a single call — there is no upload step because these jobs cut from the parent job's already-stored source (referenced by `source_job_id` at job creation). Send Authorization: Payment <MPP credential> on the same call (after the initial 402 + WWW-Authenticate handshake) — the middleware verifies the credential, marks the job paid, and starts processing. After 200, poll GET /api/v1/jobs/{id} for status="completed". Returns 400 if called for an upload-based job_type (use /complete-upload instead).

Amount
0.50
Currency
USDC
Method
tempo
Intent
charge
402 Declared
Yes
Non-standard x-payment-info fields: methods: [map[amount:0.50 currency:USDC intent:charge method:tempo] map[amount:0.50 currency:USD intent:charge method:stripe]] price: map[currency:USD max:2.00 min:0.50 mode:dynamic] protocols: [map[x402:map[]] map[mpp:map[currency:USDC intent:charge method:tempo]]]

Parameters

NameInTypeRequiredDescription
id path string Yes -

Response Schema (200)

{
  "$ref": "#/components/schemas/ProcessResponse"
}

Payment Methods

Methods
tempo
Intents
charge
Currencies (discovery)
USDC
Currency (challenge)
usd
Multiple Challenges
Yes

Recipients

  • 0x781a21b963ffcc5c916d65758bb6a245d70d5ed5
Per-endpoint breakdown
GET /api/test
0x781a21b963ffcc5c916d65758bb6a245d70d5ed5

Security

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

Uptime

Discovery
Reachable (534ms)
Challenge
Reachable (1468ms)
Last Checked

Schema Completeness

Paid Operations
5
With Input Schema
1
With Description
5
4 missing schema
  • GET /api/test
  • GET /api/v1/jobs/{id}/upload-url
  • POST /api/v1/jobs/{id}/complete-upload
  • POST /api/v1/jobs/{id}/process

Documentation

Homepage
-
API Reference
-
llms.txt
-

Discovery

OpenAPI URL
https://api.weftly.ai/openapi.json
OpenAPI Version
3.1.0
Service Version
1.0.0
Document Size
27261 bytes
Document Hash
7da9c49a64e511ac8a756c9dd565a8b6a618199811bf0fbc386ecb78b231adfb

Version History (46 snapshots)

  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • document hash changed (no semantic differences detected)
  • price changed on GET /api/test: None → 0.01
  • payment method changed on GET /api/test: None → tempo
  • price changed on GET /api/v1/jobs/{id}/upload-url: None → 0.50
  • payment method changed on GET /api/v1/jobs/{id}/upload-url: None → tempo
  • price changed on POST /api/v1/jobs: None → 0.50
  • payment method changed on POST /api/v1/jobs: None → tempo
  • price changed on POST /api/v1/jobs/{id}/complete-upload: None → 0.50
  • payment method changed on POST /api/v1/jobs/{id}/complete-upload: None → tempo
  • price changed on POST /api/v1/jobs/{id}/process: None → 0.50
  • payment method changed on POST /api/v1/jobs/{id}/process: None → tempo
Grade: F (13%) → B (78%)
Scan snapshots
Date Grade Score Response Status
2026-04-19 F 13% 63ms Up
2026-04-20 F 13% 60ms Up
2026-04-21 F 13% 63ms Up
2026-04-22 F 13% 73ms Up
2026-04-23 F 13% 77ms Up
2026-04-24 F 13% 63ms Up
2026-04-25 F 13% 64ms Up
2026-04-26 F 13% 51ms Up
2026-04-27 F 13% 51ms Up
2026-04-28 F 13% 67ms Up
2026-04-29 F 13% 52ms Up
2026-04-30 F 13% 72ms Up
2026-05-01 F 13% 99ms Up
2026-05-02 F 13% 46ms Up
2026-05-03 F 13% 75ms Up
2026-05-04 F 13% 60ms Up
2026-05-05 F 13% 70ms Up
2026-05-06 F 13% 52ms Up
2026-05-07 F 13% 61ms Up
2026-05-08 F 13% 52ms Up
2026-05-09 F 13% 49ms Up
2026-05-10 F 13% 376ms Up
2026-05-11 F 13% 56ms Up
2026-05-12 F 13% 55ms Up
2026-05-13 F 13% 51ms Up
2026-05-14 F 13% 63ms Up
2026-05-15 F 13% 56ms Up
2026-05-16 F 13% 61ms Up
2026-05-17 B 78% 294ms Up
2026-05-18 B 78% 85ms Up
2026-05-19 B 78% 98ms Up
2026-05-20 B 78% 66ms Up
2026-05-21 B 78% 84ms Up
2026-05-22 B 78% 115ms Up
2026-05-23 B 78% 90ms Up
2026-05-24 B 78% 90ms Up
2026-05-25 B 78% 112ms Up
2026-05-26 B 78% 86ms Up
2026-05-27 B 78% 523ms Up
2026-05-28 B 78% 302ms Up
2026-05-29 B 78% 69ms Up
2026-05-30 B 83% 301ms Up
2026-05-31 B 83% 2687ms Up
2026-06-01 B 83% 465ms Up
2026-06-02 B 83% 98ms Up
2026-06-03 B 83% 124ms Up