> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inkrelay.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Send a test ping

> Queues a signed ping delivery to the endpoint, with the usual retries, to check that it receives and verifies webhooks. The body is an envelope of type ping with empty data. Pings are not events: they never appear in GET /v1/events and never count as usage.



## OpenAPI

````yaml /openapi/openapi.json post /v1/webhooks/{id}/ping
openapi: 3.1.0
info:
  contact:
    name: InkRelay
    url: https://docs.inkrelay.app
  description: >-
    Cloud printing API: send PDFs and raw jobs to printers attached to computers
    running the InkRelay agent.
  title: InkRelay API
  version: 1.0.0
servers:
  - description: Production
    url: https://api.inkrelay.app
security:
  - ApiKeyAuth: []
  - BasicAuth: []
tags:
  - description: Who you are, your plan and usage
    name: Account
  - description: Machines running the InkRelay agent
    name: Computers
  - description: Printers reported by agents
    name: Printers
  - description: Submit and track print jobs
    name: Print jobs
  - description: Signed event delivery to your HTTPS endpoints
    name: Webhooks
  - description: Cursor based event feed
    name: Events
  - description: Prints used this period
    name: Usage
paths:
  /v1/webhooks/{id}/ping:
    post:
      tags:
        - Webhooks
      summary: Send a test ping
      description: >-
        Queues a signed ping delivery to the endpoint, with the usual retries,
        to check that it receives and verifies webhooks. The body is an envelope
        of type ping with empty data. Pings are not events: they never appear in
        GET /v1/events and never count as usage.
      operationId: pingWebhook
      parameters:
        - in: path
          name: id
          required: true
          schema:
            format: uuid
            type: string
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookDelivery'
          description: The ping delivery, queued
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Invalid request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Missing or invalid API key or session
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: The key scope or member role does not allow this
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Not found in this organization and mode
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: The endpoint is disabled (endpoint_disabled)
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: >-
            rate_limited: more than 20 requests per second with this API key;
            retry after the Retry-After header
          headers:
            RateLimit-Limit:
              description: Requests allowed per second for this API key (20)
              schema:
                type: integer
            RateLimit-Remaining:
              description: Requests left in the current one second window
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the window frees a request
              schema:
                type: integer
            Retry-After:
              description: Whole seconds to wait before retrying; present on rate_limited
              schema:
                type: integer
      security:
        - ApiKeyAuth: []
        - BasicAuth: []
components:
  schemas:
    WebhookDelivery:
      properties:
        attempt:
          description: Sends made so far, 0 before the first
          type: integer
        createdAt:
          format: date-time
          type: string
        deliveredAt:
          format: date-time
          type:
            - string
            - 'null'
        endpointId:
          format: uuid
          type: string
        eventId:
          description: Also sent as the webhook-id header
          format: uuid
          type: string
        eventType:
          description: >-
            One of the subscribable event types, or ping for a test delivery
            from POST /v1/webhooks/{id}/ping
          example: printjob.done
          type: string
        id:
          format: uuid
          type: string
        nextAttemptAt:
          format: date-time
          type:
            - string
            - 'null'
        payload:
          additionalProperties: {}
          description: The exact envelope sent as the request body
          type: object
        responseBodyExcerpt:
          description: >-
            First 2,048 characters of the last response body, or the network
            error
          type:
            - string
            - 'null'
        responseCode:
          description: HTTP status of the last attempt; null when it got no response
          type:
            - integer
            - 'null'
        status:
          enum:
            - pending
            - retrying
            - succeeded
            - failed
          type: string
      required:
        - id
        - endpointId
        - eventId
        - eventType
        - payload
        - attempt
        - status
        - responseCode
        - responseBodyExcerpt
        - nextAttemptAt
        - deliveredAt
        - createdAt
      type: object
    Error:
      description: >-
        Every error response uses this envelope; code is stable, message is for
        humans.
      properties:
        error:
          properties:
            code:
              example: not_found
              type: string
            message:
              example: Printer not found
              type: string
            request_id:
              example: 4f9c2a7e-1b3d-4c5e-8f6a-0b1c2d3e4f5a
              type: string
            upgrade_url:
              description: Billing page to upgrade from; present on quota_exceeded
              example: https://app.inkrelay.app/billing?upgrade=1
              format: uri
              type: string
          required:
            - code
            - message
            - request_id
          type: object
      required:
        - error
      type: object
  securitySchemes:
    ApiKeyAuth:
      bearerFormat: ir_live_ or ir_test_ key
      description: >-
        Send `Authorization: Bearer <API key>`. Use an ir_test_ key in the
        playground; it only reaches virtual test printers.
      scheme: bearer
      type: http
      x-default: ir_test_REPLACE_WITH_YOUR_TEST_KEY
    BasicAuth:
      description: >-
        PrintNode compatible: put the API key in the username with an empty
        password
      scheme: basic
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.