Weftly API — MPP Grade B
On-chain Activity
Compliance Checks
1 issue
- Discovery amount 0.01 != challenge amount 1 on GET /api/test
Paid Operations (5)
GET /api/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
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| echo | query | string | No | Optional string echoed back in the response, useful for client-side smoke tests. |
Response Schema (200)
| Field | Type | Description |
|---|---|---|
| echo | string | - |
| paid | boolean | - |
| service | string | - |
POST /api/v1/jobs 0.50 USDC
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
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
- Amount
- 0.50
- Currency
- USDC
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | - |
Response Schema (200)
{
"$ref": "#/components/schemas/UploadUrlResponse"
}
POST /api/v1/jobs/{id}/complete-upload 0.50 USDC
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
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | - |
Response Schema (200)
{
"$ref": "#/components/schemas/CompleteUploadResponse"
}
POST /api/v1/jobs/{id}/process 0.50 USDC
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
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| 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
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 |