Skip to main content
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):
RouteRemoved
POST /api/signer/generate-live-paymentv0.2.x
POST /api/signer/sign-orchestrator-infov0.2.x
POST /api/signer/sign-byoc-jobv0.2.x
GET /api/signer/discover-orchestratorsv0.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:
RouteStatus
POST /api/v1/apps/{clientId}/usage/signed-tickets410 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:
RouteStatusReplacement
POST /api/v1/subscriptions410 GoneUse POST .../plans + OpenMeter checkout
DELETE /api/v1/subscriptions410 GoneUse DELETE .../plans?planId=
GET /api/v1/subscriptionsDeprecated (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:
RouteStatusReplacement
GET .../users/{id}/creditsDeprecated aliasGET .../users/{id}/allowances
POST .../users/{id}/creditsRemoved / redirectsPOST .../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:
RouteStatus
GET /api/v1/apps/{clientId}/manifestDeprecated — returns fail-open stub only
PUT /api/v1/apps/{clientId}/manifestDeprecated
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:
MethodReplacement
getAppManifest({ ifNoneMatch? })Plans UI
parseAppManifestResponse(raw)N/A
computeManifestRevision(parsed)N/A

Deprecated discovery profiles

Affected routes:
RouteStatus
GET/POST .../discovery-profilesLegacy — 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

RouteStatusReplacement
POST /api/signer/generate-live-payment410 GonecreateDirectSignerProxyHandler + DMZ
POST /api/signer/sign-orchestrator-info410 GoneDirect DMZ
POST /api/signer/sign-byoc-job410 GoneDirect DMZ
GET /api/signer/discover-orchestrators410 GonePlans UI
POST .../usage/signed-tickets410 GoneKafka async metering (no replacement)
POST /api/v1/subscriptions410 GonePlans CRUD + checkout
DELETE /api/v1/subscriptions410 GonePlans CRUD
POST .../users/{id}/creditsRemovedPOST .../users/{id}/allowances
GET .../users/{id}/creditsDeprecated aliasGET .../users/{id}/allowances
getUserCredits() SDK methodDeprecatedgetUserAllowances()
grantUserCredits() SDK methodDeprecatedgrantUserAllowance()
ingestSignedTicket() SDK methodLegacyNo direct replacement (Kafka handles metering)
GET .../manifestDeprecatedPlans UI
PUT .../manifestDeprecatedPlans UI
getAppManifest() SDK methodDeprecatedPlans UI