This page documents endpoints that have been removed (returning 410 Gone) or deprecated in PymtHouse v0.2.x. Follow the migration steps to update your integration.
Hosted signer proxy removed (/api/signer/*)
Affected routes (all return 410 Gone):
| Route | Removed |
|---|
POST /api/signer/generate-live-payment | v0.2.x |
POST /api/signer/sign-orchestrator-info | v0.2.x |
POST /api/signer/sign-byoc-job | v0.2.x |
GET /api/signer/discover-orchestrators | v0.2.x |
Why it was removed
The hosted /api/signer/* HTTP proxy was a synchronous pass-through between your backend and the go-livepeer DMZ. It created a PymtHouse-hosted bottleneck on the signing hot path and was incompatible with direct DMZ deployments.
Migration
Step 1: Fetch the remote DMZ URL and webhook URL for your app:
GET /api/v1/apps/{clientId}/signer/routing
Authorization: Basic base64(m2m_id:m2m_secret)
Response includes dmzUrl and webhookUrl.
Step 2: Use @pymthouse/builder-sdk/signer/server to proxy requests directly to the DMZ:
import { createDirectSignerProxyHandler } from "@pymthouse/builder-sdk/signer/server";
import { createPmtHouseClientFromEnv } from "@pymthouse/builder-sdk/env";
const client = createPmtHouseClientFromEnv();
const routing = await client.getSignerRouting();
const handler = createDirectSignerProxyHandler({
client,
dmzUrl: routing.dmzUrl,
});
Step 3: Set up the go-livepeer identity webhook using @pymthouse/builder-sdk/signer/webhook:
import {
createRemoteSignerAuthorizeHandler,
createOidcRemoteSignerWebhookConfig,
} from "@pymthouse/builder-sdk/signer/webhook";
const authorize = createRemoteSignerAuthorizeHandler(
createOidcRemoteSignerWebhookConfig({
webhookSecret: process.env.WEBHOOK_SECRET!,
jwtIssuer: process.env.PYMTHOUSE_ISSUER_URL!,
jwtAudience: process.env.JWT_AUDIENCE!,
}),
);
See Signer routing for the full setup guide.
POST /api/signer/device/exchange is not removed — it is an active SDK helper for device token → signer JWT exchange. Only the generate-live-payment, sign-orchestrator-info, sign-byoc-job, and discover-orchestrators proxy routes are gone.
Synchronous signed-ticket ingest removed
Affected route:
| Route | Status |
|---|
POST /api/v1/apps/{clientId}/usage/signed-tickets | 410 Gone |
Why it was removed
Synchronous HTTP ingest on the signing hot path added latency and created a PymtHouse-side bottleneck. Production metering is now asynchronous: go-livepeer emits create_signed_ticket events to Kafka (livepeer-gateway-events); the OpenMeter collector consumes Kafka and writes CloudEvents to OpenMeter/Konnect.
Migration
No direct replacement for synchronous ingest from your backend. Metering is handled by the go-livepeer DMZ and Kafka collector automatically when signing requests are processed through the DMZ.
Diagnostic-only ingest remains available at:
POST /api/v1/ingest/events
Authorization: Bearer INGEST_SHARED_SECRET
This endpoint is for monitoring and diagnostics only — it does not write authoritative billing usage to OpenMeter.
To verify usage is flowing, query the Usage API after signing requests:
curl -sS \
-u "${M2M_ID}:${M2M_SECRET}" \
"${BASE_URL}/api/v1/apps/${CLIENT_ID}/usage?groupBy=pipeline_model" | jq .
Subscription CRUD removed
Affected routes:
| Route | Status | Replacement |
|---|
POST /api/v1/subscriptions | 410 Gone | Use POST .../plans + OpenMeter checkout |
DELETE /api/v1/subscriptions | 410 Gone | Use DELETE .../plans?planId= |
GET /api/v1/subscriptions | Deprecated (returns legacy cache rows) | Use GET .../plans or GET .../users/{id}/subscription |
Manage subscriptions through the plans CRUD API (dashboard session) or the OpenMeter billing checkout flow. See Plans and Allowances.
Deprecated credits alias
Affected routes:
| Route | Status | Replacement |
|---|
GET .../users/{id}/credits | Deprecated alias | GET .../users/{id}/allowances |
POST .../users/{id}/credits | Removed / redirects | POST .../users/{id}/allowances |
The credits endpoints re-export the allowances endpoints. The POST route has been removed from PymtHouse. Update all references:
- GET /api/v1/apps/{clientId}/users/{externalUserId}/credits
+ GET /api/v1/apps/{clientId}/users/{externalUserId}/allowances
- POST /api/v1/apps/{clientId}/users/{externalUserId}/credits
+ POST /api/v1/apps/{clientId}/users/{externalUserId}/allowances
SDK:
- await client.getUserCredits(externalUserId)
+ await client.getUserAllowances(externalUserId)
- await client.grantUserCredits(externalUserId, input)
+ await client.grantUserAllowance(externalUserId, input)
App manifest routes deprecated
Affected routes:
| Route | Status |
|---|
GET /api/v1/apps/{clientId}/manifest | Deprecated — returns fail-open stub only |
PUT /api/v1/apps/{clientId}/manifest | Deprecated |
The manifest API was used to configure discoverable pipeline/model combinations (subtractive exclusions). The signing hot path no longer enforces capability restrictions; GET .../manifest returns a fail-open stub (capabilities: []) rather than a resolved list. Manage capability exclusions through the Plans UI instead.
SDK methods deprecated:
| Method | Replacement |
|---|
getAppManifest({ ifNoneMatch? }) | Plans UI |
parseAppManifestResponse(raw) | N/A |
computeManifestRevision(parsed) | N/A |
Deprecated discovery profiles
Affected routes:
| Route | Status |
|---|
GET/POST .../discovery-profiles | Legacy — still functional, not removed |
GET/PUT/DELETE .../discovery-profiles/{id} | Legacy — still functional, not removed |
Discovery profiles are a legacy mechanism for expressing pipeline/model capability sets on plans. They remain functional for backward compatibility but new integrations should use the Plans UI for network capability management.
Summary table
| Route | Status | Replacement |
|---|
POST /api/signer/generate-live-payment | 410 Gone | createDirectSignerProxyHandler + DMZ |
POST /api/signer/sign-orchestrator-info | 410 Gone | Direct DMZ |
POST /api/signer/sign-byoc-job | 410 Gone | Direct DMZ |
GET /api/signer/discover-orchestrators | 410 Gone | Plans UI |
POST .../usage/signed-tickets | 410 Gone | Kafka async metering (no replacement) |
POST /api/v1/subscriptions | 410 Gone | Plans CRUD + checkout |
DELETE /api/v1/subscriptions | 410 Gone | Plans CRUD |
POST .../users/{id}/credits | Removed | POST .../users/{id}/allowances |
GET .../users/{id}/credits | Deprecated alias | GET .../users/{id}/allowances |
getUserCredits() SDK method | Deprecated | getUserAllowances() |
grantUserCredits() SDK method | Deprecated | grantUserAllowance() |
ingestSignedTicket() SDK method | Legacy | No direct replacement (Kafka handles metering) |
GET .../manifest | Deprecated | Plans UI |
PUT .../manifest | Deprecated | Plans UI |
getAppManifest() SDK method | Deprecated | Plans UI |