API REFERENCE · v1

Endpoints and request formats

Everything you need to integrate, manage, and troubleshoot. Project API keys and short-lived control tokens are different credentials.

42 endpoints

Webhook delivery API

Project API key authentication.

GET/api/v1/project/Project
200 response

Project

Get the project associated with your project API key.

Project key
Request body
No JSON request body required.
Example response 200
{
  "id": "PROJECT_UUID",
  "name": "Production",
  "slug": "production",
  "monthly_event_quota": 1000
}
curl -X GET 'https://api.hookstride.com/api/v1/project/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
GET/api/v1/usage/Usage
200 response

Usage

Return this month's event quota and delivery counters.

Project key
Request body
No JSON request body required.
Example response 200
{
  "period_start": "2026-10-01",
  "events_ingested": 125,
  "delivery_attempts": 142,
  "events_delivered": 120,
  "events_failed": 3,
  "event_quota": 1000,
  "events_remaining": 875
}
curl -X GET 'https://api.hookstride.com/api/v1/usage/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
GET/api/v1/endpoints/List endpoints
200 response

List endpoints

List paginated delivery destinations for the current project.

Project key
Request body
No JSON request body required.
Example response 200
{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": "ENDPOINT_UUID",
      "name": "Production receiver",
      "url": "https://example.com/webhooks",
      "is_active": true
    }
  ]
}
curl -X GET 'https://api.hookstride.com/api/v1/endpoints/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/api/v1/endpoints/Create endpoint
201 response

Create endpoint

Register a public HTTPS webhook destination. The signing secret appears only in this response.

Project key
Request body
{
  "name": "Production receiver",
  "url": "https://example.com/webhooks"
}
Example response 201
{
  "id": "ENDPOINT_UUID",
  "name": "Production receiver",
  "url": "https://example.com/webhooks",
  "is_active": true,
  "signing_secret": "SECRET_SAVE_ONCE"
}
curl -X POST 'https://api.hookstride.com/api/v1/endpoints/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Production receiver","url":"https://example.com/webhooks"}'
GET/api/v1/endpoints/{id}/Endpoint details
200 response

Endpoint details

Inspect one destination belonging to the authenticated project.

Project key
Request body
No JSON request body required.
Example response 200
{
  "id": "ENDPOINT_UUID",
  "name": "Production receiver",
  "url": "https://example.com/webhooks",
  "is_active": true
}
curl -X GET 'https://api.hookstride.com/api/v1/endpoints/{id}/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
PATCH/api/v1/endpoints/{id}/Update endpoint
200 response

Update endpoint

Change a destination's name, URL, or active status.

Project key
Request body
{
  "name": "Updated receiver",
  "is_active": true
}
Example response 200
{
  "id": "ENDPOINT_UUID",
  "name": "Updated receiver",
  "url": "https://example.com/webhooks",
  "is_active": true
}
curl -X PATCH 'https://api.hookstride.com/api/v1/endpoints/{id}/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Updated receiver","is_active":true}'
POST/api/v1/endpoints/{id}/rotate-secret/Rotate signing secret
200 response

Rotate signing secret

Issue a new endpoint signing secret. Rotation takes effect immediately.

Project key
Request body
No JSON request body required.
Example response 200
{
  "endpoint": "ENDPOINT_UUID",
  "signing_secret": "NEW_SECRET_SAVE_ONCE"
}
curl -X POST 'https://api.hookstride.com/api/v1/endpoints/{id}/rotate-secret/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
GET/api/v1/events/List events
200 response

List events

List paginated events. Filter by status, event_type, or endpoint UUID.

Project key
Request body
No JSON request body required.
Example response 200
{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": "EVENT_UUID",
      "event_type": "payment.completed",
      "status": "delivered",
      "attempt_count": 1
    }
  ]
}
curl -X GET 'https://api.hookstride.com/api/v1/events/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/api/v1/events/Send an event
201 response

Send an event

Persist and enqueue a signed webhook. Send an optional Idempotency-Key header to prevent duplicates.

Project key
Request body
{
  "endpoint": "ENDPOINT_UUID",
  "event_type": "payment.completed",
  "payload": {
    "payment_id": "pay_123",
    "amount": 250,
    "currency": "GHS"
  }
}
Example response 201
{
  "id": "EVENT_UUID",
  "endpoint": "ENDPOINT_UUID",
  "event_type": "payment.completed",
  "status": "pending",
  "attempt_count": 0,
  "attempts": []
}
curl -X POST 'https://api.hookstride.com/api/v1/events/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"endpoint":"ENDPOINT_UUID","event_type":"payment.completed","payload":{"payment_id":"pay_123","amount":250,"currency":"GHS"}}'
GET/api/v1/events/{id}/Event details
200 response

Event details

Retrieve an event with delivery attempts, errors, and timing information.

Project key
Request body
No JSON request body required.
Example response 200
{
  "id": "EVENT_UUID",
  "event_type": "payment.completed",
  "status": "delivered",
  "attempt_count": 1,
  "attempts": [
    {
      "attempt_number": 1,
      "status_code": 200,
      "duration_ms": 110
    }
  ]
}
curl -X GET 'https://api.hookstride.com/api/v1/events/{id}/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/api/v1/events/{id}/replay/Replay event
201 response

Replay event

Requeue a delivered or permanently failed event as a new event linked to its original.

Project key
Request body
No JSON request body required.
Example response 201
{
  "id": "NEW_EVENT_UUID",
  "replayed_from": "EVENT_UUID",
  "status": "pending",
  "attempts": []
}
curl -X POST 'https://api.hookstride.com/api/v1/events/{id}/replay/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
GET/api/v1/stats/Delivery statistics
200 response

Delivery statistics

Retrieve totals, successful deliveries, failures, pending events, and success rate.

Project key
Request body
No JSON request body required.
Example response 200
{
  "project": "PROJECT_UUID",
  "events": {
    "total": 100,
    "delivered": 92,
    "failed": 3,
    "pending": 5,
    "success_rate": 92
  }
}
curl -X GET 'https://api.hookstride.com/api/v1/stats/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"

Incoming webhook gateway

Optional signature verification and routing.

GET/api/v1/sources/List connected sources
200 response

List connected sources

Retrieve your project's external and custom webhook sources.

Project key
Request body
No JSON request body required.
Example response 200
{
  "results": [
    {
      "id": "SOURCE_UUID",
      "name": "Shared provider",
      "provider": "custom",
      "routing": "rules"
    }
  ]
}
curl -X GET 'https://api.hookstride.com/api/v1/sources/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/api/v1/sources/Connect a webhook source
201 response

Connect a webhook source

Register a signed sender. Copy the returned ingress URL into its webhook settings.

Project key
Request body
{
  "name": "Shared sender",
  "provider": "custom",
  "routing": "rules"
}
Example response 201
{
  "id": "SOURCE_UUID",
  "name": "Shared sender",
  "ingest_url": "https://example.com/ingest/v1/SOURCE_UUID/",
  "signing_secret": "ONE_TIME_SECRET"
}
curl -X POST 'https://api.hookstride.com/api/v1/sources/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Shared sender","provider":"custom","routing":"rules"}'
PATCH/api/v1/sources/{id}/Update source
200 response

Update source

Pause or rename an existing incoming source.

Project key
Request body
{
  "is_active": false
}
Example response 200
{
  "id": "SOURCE_UUID",
  "name": "Shared sender",
  "is_active": false
}
curl -X PATCH 'https://api.hookstride.com/api/v1/sources/{id}/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"is_active":false}'
POST/api/v1/sources/{id}/rotate-secret/Rotate source secret
200 response

Rotate source secret

Replace the stored source signing secret; sender updates must be coordinated.

Project key
Request body
{}
Example response 200
{
  "id": "SOURCE_UUID",
  "rotated": true,
  "signing_secret": "ONE_TIME_SECRET_FOR_CUSTOM"
}
curl -X POST 'https://api.hookstride.com/api/v1/sources/{id}/rotate-secret/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
POST/api/v1/routes/Create event routing rule
201 response

Create event routing rule

Forward signed events to a project-owned destination matching an event type and optional field.

Project key
Request body
{
  "source": "SOURCE_UUID",
  "endpoint": "ENDPOINT_UUID",
  "event_pattern": "order.*"
}
Example response 201
{
  "id": "RULE_UUID",
  "source": "SOURCE_UUID",
  "endpoint": "ENDPOINT_UUID"
}
curl -X POST 'https://api.hookstride.com/api/v1/routes/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"SOURCE_UUID","endpoint":"ENDPOINT_UUID","event_pattern":"order.*"}'
GET/api/v1/routes/List event routing rules
200 response

List event routing rules

Review subscriptions controlling inbound fan-out.

Project key
Request body
No JSON request body required.
Example response 200
{
  "results": []
}
curl -X GET 'https://api.hookstride.com/api/v1/routes/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/api/v1/reference-bindings/Register trusted reference
201 response

Register trusted reference

Bind an external reference to one destination before the external event is created.

Project key
Request body
{
  "source": "SOURCE_UUID",
  "endpoint": "ENDPOINT_UUID",
  "reference": "ORDER-123"
}
Example response 201
{
  "id": "BINDING_UUID",
  "reference": "ORDER-123"
}
curl -X POST 'https://api.hookstride.com/api/v1/reference-bindings/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"SOURCE_UUID","endpoint":"ENDPOINT_UUID","reference":"ORDER-123"}'
GET/api/v1/reference-bindings/List trusted references
200 response

List trusted references

View pre-registered event ownership bindings.

Project key
Request body
No JSON request body required.
Example response 200
{
  "results": []
}
curl -X GET 'https://api.hookstride.com/api/v1/reference-bindings/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
GET/api/v1/inbound-events/Incoming event history
200 response

Incoming event history

Inspect accepted upstream events without exposing their payload by default.

Project key
Request body
No JSON request body required.
Example response 200
{
  "results": [
    {
      "id": "MESSAGE_UUID",
      "event_type": "order.created",
      "route_count": 1
    }
  ]
}
curl -X GET 'https://api.hookstride.com/api/v1/inbound-events/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/api/v1/inbound-events/{id}/redispatch/Redispatch an incoming event
200 response

Redispatch an incoming event

Send a stored upstream event to newly matching destinations without duplicating prior deliveries.

Project key
Request body
No JSON request body required.
Example response 200
{
  "id": "MESSAGE_UUID",
  "routed": 1,
  "duplicate": false
}
curl -X POST 'https://api.hookstride.com/api/v1/inbound-events/{id}/redispatch/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
GET/api/v1/ingress-stats/Incoming event statistics
200 response

Incoming event statistics

Monitor received, unmatched and delivered events in your project.

Project key
Request body
No JSON request body required.
Example response 200
{
  "sources": 1,
  "received": 120,
  "unrouted": 2,
  "outbound_deliveries": 118
}
curl -X GET 'https://api.hookstride.com/api/v1/ingress-stats/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/api/v1/reference-registration-keys/Create a limited registration key
201 response

Create a limited registration key

Issue a one-time key for exactly one external source and one destination. Store it only on that app's backend.

Project key
Request body
{
  "source": "SOURCE_UUID",
  "endpoint": "DESTINATION_UUID",
  "name": "Voting app"
}
Example response 201
{
  "id": "KEY_UUID",
  "masked_key": "whrr_...abcd",
  "token": "ONE_TIME_RESTRICTED_KEY",
  "expires_at": "2027-01-28T00:00:00Z"
}
curl -X POST 'https://api.hookstride.com/api/v1/reference-registration-keys/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"SOURCE_UUID","endpoint":"DESTINATION_UUID","name":"Voting app"}'
GET/api/v1/reference-registration-keys/List limited registration keys
200 response

List limited registration keys

View masked, expiring credentials for each app without exposing token values.

Project key
Request body
No JSON request body required.
Example response 200
{
  "results": [
    {
      "id": "KEY_UUID",
      "name": "Voting app",
      "masked_key": "whrr_...abcd"
    }
  ]
}
curl -X GET 'https://api.hookstride.com/api/v1/reference-registration-keys/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/api/v1/reference-registration-keys/{id}/revoke/Revoke a limited registration key
200 response

Revoke a limited registration key

Immediately disable one app's registration access without affecting other destinations.

Project key
Request body
No JSON request body required.
Example response 200
{
  "id": "KEY_UUID",
  "is_active": false
}
curl -X POST 'https://api.hookstride.com/api/v1/reference-registration-keys/{id}/revoke/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
POST/ingest/v1/register-reference/Register an application reference
201 response

Register an application reference

Use the app's limited token to claim its own order, transaction or subscription reference before the provider emits an event. No source or destination ID needed.

Registration key
Request body
{
  "reference": "ORDER-APP-123"
}
Example response 201
{
  "id": "BINDING_UUID",
  "reference": "ORDER-APP-123"
}
curl -X POST 'https://api.hookstride.com/ingest/v1/register-reference/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reference":"ORDER-APP-123"}'
GET/api/v1/destinations/{id}/delivery/Inspect destination delivery format
200 response

Inspect destination delivery format

See how a destination receives JSON and which authentication mode is configured. Secrets are never returned.

Project key
Request body
No JSON request body required.
Example response 200
{
  "endpoint": "DESTINATION_UUID",
  "payload_format": "envelope",
  "field_map": {},
  "auth_mode": "signed",
  "credential_configured": false
}
curl -X GET 'https://api.hookstride.com/api/v1/destinations/{id}/delivery/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY"
PUT/api/v1/destinations/{id}/delivery/Configure destination delivery
200 response

Configure destination delivery

Choose standard envelope, original JSON or bounded field mapping; optionally add an encrypted Bearer token or X-Api-Key. Every delivery still carries the destination's HMAC signature.

Project key
Request body
{
  "payload_format": "mapped",
  "field_map": {
    "transaction.reference": "payload.data.reference",
    "transaction.event": "event.type",
    "app": {
      "const": "my-application"
    }
  },
  "auth_mode": "bearer",
  "credential": "DESTINATION_TOKEN"
}
Example response 200
{
  "endpoint": "DESTINATION_UUID",
  "payload_format": "mapped",
  "field_map": {
    "transaction.reference": "payload.data.reference",
    "transaction.event": "event.type",
    "app": {
      "const": "my-application"
    }
  },
  "auth_mode": "bearer",
  "credential_configured": true
}
curl -X PUT 'https://api.hookstride.com/api/v1/destinations/{id}/delivery/' \
  -H "Authorization: Bearer $HOOKSTRIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"payload_format":"mapped","field_map":{"transaction.reference":"payload.data.reference","transaction.event":"event.type","app":{"const":"my-application"}},"auth_mode":"bearer","credential":"DESTINATION_TOKEN"}'

Account Control API

Workspace and project administration with a separate control token.

POST/control/v1/auth/email/start/Request an email sign-in code
200 response

Request an email sign-in code

Send a single-use, 10-minute code. Optionally set a workspace name when registering; passwords are not supported.

Public
Request body
{
  "email": "dev@example.com",
  "workspace_name": "Acme"
}
Example response 200
{
  "challenge": "EMAIL_CHALLENGE_UUID",
  "expires_in": 600
}
curl -X POST 'https://api.hookstride.com/control/v1/auth/email/start/' \
  -H "Content-Type: application/json" \
  -d '{"email":"dev@example.com","workspace_name":"Acme"}'
POST/control/v1/auth/email/verify/Verify a one-time email code
202 response

Verify a one-time email code

Complete email verification. Privileged members must additionally complete MFA; the Next.js flow receives a 202 challenge, never a privileged token from email verification alone.

Public
Request body
{
  "challenge": "EMAIL_CHALLENGE_UUID",
  "code": "ABCD2345"
}
Example response 202
{
  "requires_mfa": true,
  "enrollment_required": true,
  "challenge": "MFA_CHALLENGE",
  "expires_in": 600
}
curl -X POST 'https://api.hookstride.com/control/v1/auth/email/verify/' \
  -H "Content-Type: application/json" \
  -d '{"challenge":"EMAIL_CHALLENGE_UUID","code":"ABCD2345"}'
POST/control/v1/auth/google/verify/Verify a Google sign-in identity token
202 response

Verify a Google sign-in identity token

Verify a Google OIDC ID token using Google's JWKS and the configured client audience and one-time nonce. Privileged users receive an MFA challenge instead of a bearer token.

Public
Request body
{
  "id_token": "GOOGLE_OIDC_ID_TOKEN",
  "nonce": "OAUTH_ONE_TIME_NONCE"
}
Example response 202
{
  "requires_mfa": true,
  "enrollment_required": false,
  "challenge": "MFA_CHALLENGE",
  "expires_in": 600
}
curl -X POST 'https://api.hookstride.com/control/v1/auth/google/verify/' \
  -H "Content-Type: application/json" \
  -d '{"id_token":"GOOGLE_OIDC_ID_TOKEN","nonce":"OAUTH_ONE_TIME_NONCE"}'
POST/control/v1/auth/logout/Sign out
204 response

Sign out

Revoke the current control token. Returns no response body.

Control token
Request body
No JSON request body required.
Example response 204
204 No Content
curl -X POST 'https://api.hookstride.com/control/v1/auth/logout/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN"
GET/control/v1/me/Your profile
200 response

Your profile

Retrieve the authenticated user and their account memberships.

Control token
Request body
No JSON request body required.
Example response 200
{
  "user": {
    "id": 1,
    "email": "dev@example.com"
  },
  "memberships": [
    {
      "account_name": "Acme",
      "role": "owner"
    }
  ]
}
curl -X GET 'https://api.hookstride.com/control/v1/me/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN"
GET/control/v1/projects/List projects
200 response

List projects

List projects accessible to your account.

Control token
Request body
No JSON request body required.
Example response 200
[
  {
    "id": "PROJECT_UUID",
    "name": "Production",
    "role": "owner",
    "monthly_event_quota": 1000
  }
]
curl -X GET 'https://api.hookstride.com/control/v1/projects/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN"
POST/control/v1/projects/Create project
201 response

Create project

Create an additional project within an account where you have admin access.

Control token
Request body
{
  "account_id": "ACCOUNT_UUID",
  "name": "Staging",
  "slug": "staging"
}
Example response 201
{
  "id": "PROJECT_UUID",
  "name": "Staging",
  "slug": "staging",
  "role": "owner"
}
curl -X POST 'https://api.hookstride.com/control/v1/projects/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"account_id":"ACCOUNT_UUID","name":"Staging","slug":"staging"}'
GET/control/v1/projects/{project_id}/Project details
200 response

Project details

Read the project configuration and subscription summary.

Control token
Request body
No JSON request body required.
Example response 200
{
  "id": "PROJECT_UUID",
  "name": "Production",
  "monthly_event_quota": 1000,
  "subscription": {
    "plan_code": "free",
    "status": "active"
  }
}
curl -X GET 'https://api.hookstride.com/control/v1/projects/{project_id}/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN"
GET/control/v1/projects/{project_id}/usage/Project usage history
200 response

Project usage history

Get current usage, up to 12 months of history, and subscription details.

Control token
Request body
No JSON request body required.
Example response 200
{
  "current": {
    "events_ingested": 125,
    "event_quota": 1000
  },
  "history": [],
  "subscription": {
    "plan_code": "free",
    "status": "active"
  }
}
curl -X GET 'https://api.hookstride.com/control/v1/projects/{project_id}/usage/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN"
GET/control/v1/projects/{project_id}/subscription/Subscription details
200 response

Subscription details

Read the project's current subscription status.

Control token
Request body
No JSON request body required.
Example response 200
{
  "provider": "direct",
  "plan_code": "free",
  "status": "active"
}
curl -X GET 'https://api.hookstride.com/control/v1/projects/{project_id}/subscription/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN"
GET/control/v1/projects/{project_id}/api-keys/List API keys
200 response

List API keys

List masked keys for a project. The raw secret is never returned again.

Control token
Request body
No JSON request body required.
Example response 200
[
  {
    "id": "KEY_UUID",
    "name": "Production server",
    "masked_key": "whrk_••••",
    "is_active": true
  }
]
curl -X GET 'https://api.hookstride.com/control/v1/projects/{project_id}/api-keys/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN"
POST/control/v1/projects/{project_id}/api-keys/Issue API key
201 response

Issue API key

Create a project-scoped key. Store the raw key securely: it is shown only at issuance.

Control token
Request body
{
  "name": "Production server",
  "expires_days": 90
}
Example response 201
{
  "api_key": {
    "id": "KEY_UUID",
    "name": "Production server"
  },
  "key": "whrk_••••"
}
curl -X POST 'https://api.hookstride.com/control/v1/projects/{project_id}/api-keys/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Production server","expires_days":90}'
DELETE/control/v1/projects/{project_id}/api-keys/{key_id}/Revoke API key
204 response

Revoke API key

Immediately revoke a key. Revoked credentials cannot access the data API.

Control token
Request body
No JSON request body required.
Example response 204
204 No Content
curl -X DELETE 'https://api.hookstride.com/control/v1/projects/{project_id}/api-keys/{key_id}/' \
  -H "Authorization: Bearer $HOOKSTRIDE_CONTROL_TOKEN"
ERRORS

Errors & limits

Predictable HTTP responses help integrations recover safely.

StatusMeaningAction
400Invalid request or parametersCorrect the body, filter or URL.
401Invalid or expired credentialsCheck your bearer token or API key.
403Insufficient permissionsUse an appropriately authorized role.
404Unknown or inaccessible resourceCheck the ID and project scope.
409Idempotency conflictUse new idempotency data or replay a terminal event.
429Quota or rate limit exceededWait for reset or review plan usage.

Examples are illustrative and never contain real API keys.Read the signing and retry guide →