Skip to content
Docs menu

Copy the text

Your browser did not allow copying. The text below is selected: press Ctrl+C, or ⌘C on a Mac.

Create a webhook

Sets the webhook of the account, the same one as in the dashboard. job.* events are sent for jobs created with /v2, conversion.* events for conversions created with /v1. An account has one webhook: if it has one already, the answer is 409. signing_secret is only in this response.

POSThttps://api.switchfile.io/v2/webhooks

Needs an API key: Authorization: Bearer YOUR_API_KEY. See Authentication.

Example

curl "https://api.switchfile.io/v2/webhooks" \
  -H "Authorization: Bearer $SWITCHFILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/hooks/switchfile",
    "events": [
      "job.finished",
      "job.failed"
    ]
  }'

Request body

  • eventsstring[]required

    at least 1 items

  • urlstringrequired

    Public http or https URL on port 80 or 443

    1 to 2048 characters

Responses

  • 201Created
    • dataCreatedWebhookrequired
    • data.created_atstringrequired

      ISO 8601 timestamp, for example 2026-11-06T18:00:00+00:00

    • data.disabledbooleanrequired

      Always false: switchfile does not disable webhooks on its own

    • data.eventsstring[]required
    • data.failingbooleanrequired

      The last delivery to this URL failed

    • data.idstringrequired

      ID of the webhook (a UUID; CloudConvert uses an integer)

    • data.last_error_atstring | nullrequired

      ISO 8601 timestamp, for example 2026-11-06T18:00:00+00:00

    • data.last_response_codestring | nullrequired

      HTTP status of the last failed delivery, or NETWORK_ERROR

    • data.linksobjectrequired
    • data.links.selfstringrequired
    • data.signing_secretstringrequired

      Signing secret of the account. Only in this response

    • data.updated_atstringrequired

      ISO 8601 timestamp, for example 2026-11-06T18:00:00+00:00

    • data.urlstringrequired
    201 application/json
    {
      "data": {
        "id": "1a7e3c5b-9d2f-4b6a-8e0c-5f3d1b7a9c24",
        "url": "https://example.com/hooks/switchfile",
        "disabled": false,
        "events": [
          "job.finished",
          "job.failed"
        ],
        "failing": false,
        "last_error_at": null,
        "last_response_code": null,
        "created_at": "2026-11-06T18:00:00+00:00",
        "updated_at": "2026-11-06T18:00:00+00:00",
        "links": {
          "self": "https://api.switchfile.io/v2/webhooks/1a7e3c5b-9d2f-4b6a-8e0c-5f3d1b7a9c24"
        },
        "signing_secret": "your-signing-secret"
      }
    }
  • 401The API key is missing or not valid
    401 application/json
    {
      "message": "Missing or invalid API key.",
      "code": "UNAUTHENTICATED"
    }
  • 404Does not exist for this account
    404 application/json
    {
      "message": "Job not found.",
      "code": "NOT_FOUND"
    }
  • 409The account has a webhook already. Delete it first or change it in the dashboard
    409 application/json
    {
      "message": "This account already has a webhook. switchfile has one webhook per account: delete it first or change it in the dashboard.",
      "code": "WEBHOOK_EXISTS"
    }
  • 411The request has a body but no Content-Length header
    411 application/json
    {
      "message": "A Content-Length header is required for this request.",
      "code": "LENGTH_REQUIRED"
    }
  • 413The request or the file is too large
    413 application/json
    {
      "message": "The request body is larger than the allowed maximum.",
      "code": "PAYLOAD_TOO_LARGE"
    }
  • 422The URL is not a public http or https address, or an event is unknown
    422 application/json
    {
      "message": "url: The URL points to a private, reserved or own network address.",
      "code": "INVALID_DATA",
      "errors": {
        "url": [
          "The URL points to a private, reserved or own network address."
        ]
      }
    }
  • 429Too many requests or a daily quota is used up. See Retry-After
    429 application/json
    {
      "message": "Too many requests. Try again in 12 seconds.",
      "code": "RATE_LIMIT_EXCEEDED"
    }

Error bodies and codes are explained in Errors.