DocsSkmtc API

This reference is the skmtc/skmtc-api API on Hub. Star it to see each revision, and add a pipeline to get its changes.

Star
POST

Rotate a pipeline's webhook secret

Replace the signing secret of a pipeline's webhook action. The response carries the new secret, shown only this once. The old secret stops at once: every later attempt signs with the new one, including retries of events captured before the rotation. 422 for a pipeline with no webhook action. Signed-in sessions only: a leaked personal access token must not be able to replace the secret and break a working receiver.

Request

Method
POST
Path
/v1/pipelines/{account}/{pipeline}/rotate-webhook-secret
account
stringpath, required
pipeline
stringpath, required

Response

200 application/json

The request has succeeded.

object

A pipeline with its webhook action's signing secret. Returned by create, update and rotate only.

idstringrequired

An RFC 4122 UUID, rendered as a string.

ownerobjectrequired

A user or organization account - the polymorphic resource owner.

namestringrequired

Unique within the owner account.

statusenumrequiredactivepaused

Whether a pipeline fires. paused is entered by hand, or after 5 failed deliveries in a row.

subscriptionobjectrequired

The trigger of a pipeline: which API starts it. A pipeline fires when a revision becomes the latest revision of the API.

actionsarray of PipelineActionrequired

At most one action of each type, in the order they run.

consecutiveFailuresintegerrequired

Failed deliveries in a row; the auto-pause counter.

lastDeliveryobject | nullrequired

The newest delivery; null when the pipeline has none.

viewerobjectrequired

The requesting viewer's effective permissions on this pipeline.

createdAtstringrequired
updatedAtstringrequired
urlstringrequired

An absolute URL.

htmlUrlstringrequired

An absolute URL.

webhookSecretstring

The webhook action's signing secret in plaintext, shown only this once. Present when the request added the webhook action, and on rotate. It cannot be read again; rotate it to get a new one.

Example response
{
  "id": "00000000-0000-0000-0000-000000000000",
  "owner": {
    "id": "string",
    "handle": "string",
    "displayName": "string",
    "type": "user",
    "avatarUrl": "string",
    "bio": "string",
    "location": "string",
    "emailDomain": "string",
    "claimStatus": "claimed",
    "joinedAt": "2026-10-30T12:00:00Z",
    "url": "string",
    "htmlUrl": "string"
  },
  "name": "string",
  "status": "active",
  "subscription": {
    "api": {
      "account": "string",
      "slug": "string",
      "url": "string",
      "htmlUrl": "string"
    }
  },
  "actions": [
    {
      "type": "generate",
      "skipped": true,
      "stack": {
        "account": "string",
        "slug": "string",
        "version": "string",
        "url": "string",
        "htmlUrl": "string"
      },
      "stackPin": {
        "mode": "latest",
        "version": "string"
      },
      "project": {
        "account": "string",
        "slug": "string",
        "url": "string",
        "htmlUrl": "string"
      }
    }
  ],
  "consecutiveFailures": 0,
  "lastDelivery": {
    "id": "00000000-0000-0000-0000-000000000000",
    "status": "pending",
    "apiRevisionId": "string",
    "actions": [
      {
        "type": "generate",
        "skipped": true,
        "stack": {
          "account": "string",
          "slug": "string",
          "version": "string",
          "url": "string",
          "htmlUrl": "string"
        },
        "stackPin": {
          "mode": "latest",
          "version": "string"
        },
        "project": {
          "account": "string",
          "slug": "string",
          "url": "string",
          "htmlUrl": "string"
        }
      }
    ],
    "results": [
      {
        "type": "generate",
        "outcome": "succeeded",
        "reasonCode": "string",
        "detail": "string",
        "durationMs": 0
      }
    ],
    "reasonCode": "string",
    "startedAt": "2026-10-30T12:00:00Z",
    "finishedAt": "2026-10-30T12:00:00Z",
    "createdAt": "2026-10-30T12:00:00Z",
    "url": "string"
  },
  "viewer": {
    "canRead": true,
    "canWrite": true,
    "canAdmin": true
  },
  "createdAt": "2026-10-30T12:00:00Z",
  "updatedAt": "2026-10-30T12:00:00Z",
  "url": "string",
  "htmlUrl": "string",
  "webhookSecret": "string"
}

401 application/json

Binds a concrete HTTP Status to the shared ApiError body.

object

The uniform error envelope returned for every non-2xx response.

codeenumrequiredbadRequestunauthorizedforbiddennotFoundconflictunprocessablepayloadTooLargeunsupportedMediaTypedocumentTooLargewebhookLimitReachedrateLimitedinternalunavailablebadGatewaynotImplemented

Machine-readable error category. Each value pairs with one HTTP status.

messagestringrequired

Human-readable summary safe to surface to end users.

requestIdstringrequired

Correlates the response with server logs for support.

detailsarray of ErrorDetail
Example response
{
  "code": "badRequest",
  "message": "string",
  "requestId": "string",
  "details": [
    {
      "field": "string",
      "message": "string"
    }
  ]
}

403 application/json

Binds a concrete HTTP Status to the shared ApiError body.

object

The uniform error envelope returned for every non-2xx response.

codeenumrequiredbadRequestunauthorizedforbiddennotFoundconflictunprocessablepayloadTooLargeunsupportedMediaTypedocumentTooLargewebhookLimitReachedrateLimitedinternalunavailablebadGatewaynotImplemented

Machine-readable error category. Each value pairs with one HTTP status.

messagestringrequired

Human-readable summary safe to surface to end users.

requestIdstringrequired

Correlates the response with server logs for support.

detailsarray of ErrorDetail
Example response
{
  "code": "badRequest",
  "message": "string",
  "requestId": "string",
  "details": [
    {
      "field": "string",
      "message": "string"
    }
  ]
}

404 application/json

Binds a concrete HTTP Status to the shared ApiError body.

object

The uniform error envelope returned for every non-2xx response.

codeenumrequiredbadRequestunauthorizedforbiddennotFoundconflictunprocessablepayloadTooLargeunsupportedMediaTypedocumentTooLargewebhookLimitReachedrateLimitedinternalunavailablebadGatewaynotImplemented

Machine-readable error category. Each value pairs with one HTTP status.

messagestringrequired

Human-readable summary safe to surface to end users.

requestIdstringrequired

Correlates the response with server logs for support.

detailsarray of ErrorDetail
Example response
{
  "code": "badRequest",
  "message": "string",
  "requestId": "string",
  "details": [
    {
      "field": "string",
      "message": "string"
    }
  ]
}

422 application/json

Binds a concrete HTTP Status to the shared ApiError body.

object

The uniform error envelope returned for every non-2xx response.

codeenumrequiredbadRequestunauthorizedforbiddennotFoundconflictunprocessablepayloadTooLargeunsupportedMediaTypedocumentTooLargewebhookLimitReachedrateLimitedinternalunavailablebadGatewaynotImplemented

Machine-readable error category. Each value pairs with one HTTP status.

messagestringrequired

Human-readable summary safe to surface to end users.

requestIdstringrequired

Correlates the response with server logs for support.

detailsarray of ErrorDetail
Example response
{
  "code": "badRequest",
  "message": "string",
  "requestId": "string",
  "details": [
    {
      "field": "string",
      "message": "string"
    }
  ]
}

Changes

No changes to this operation in the revisions on Hub.