Weblate hooks API
Notification hooks allow external applications to notify Weblate that the VCS repository has been updated. You can use repository endpoints for projects, components and translations to update individual repositories.
Notification hooks allow external applications to notify Weblate that the VCS repository has been updated. You can use repository endpoints for projects, components and translations to update individual repositories.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/weblate-hooks-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Weblate's REST Hooks API
version: ''
x-logo:
url: /static/weblate.svg
description: "\nThe API is accessible on the ``/api/`` URL and it is based on [Django REST framework](https://www.django-rest-framework.org/).\n\nThe OpenAPI specification is available as feature preview, feedback welcome!\n\n## Authorization\n\n<!-- Redoc-Inject: <security-definitions> -->\n\n\n "
license:
name: GNU General Public License v3 or later
url: https://docs.weblate.org/en/latest/contributing/license.html
servers:
- url: 'http:'
description: Weblate
tags:
- name: hooks
description: 'Notification hooks allow external applications to notify Weblate that the VCS repository has been updated.
You can use repository endpoints for projects, components and translations to update individual repositories.'
paths:
/hooks/{service}/:
post:
operationId: hooks_incoming
description: Process incoming webhook from a code hosting site.
parameters:
- in: path
name: service
schema:
type: string
enum:
- azure
- bitbucket
- forgejo
- gitea
- gitee
- github
- gitlab
- pagure
required: true
tags:
- hooks
security:
- {}
responses:
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse400'
description: ''
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse404'
examples:
NotFound:
value:
type: client_error
errors:
- code: not_found
detail: Not found.
attr: null
description: ''
'405':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse405'
examples:
MethodNotAllowed:
value:
type: client_error
errors:
- code: method_not_allowed
detail: Method "get" not allowed.
attr: null
description: ''
'406':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse406'
examples:
NotAcceptable:
value:
type: client_error
errors:
- code: not_acceptable
detail: Could not satisfy the request Accept header.
attr: null
description: ''
'423':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse423'
description: ''
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse500'
examples:
APIException:
value:
type: server_error
errors:
- code: error
detail: A server error occurred.
attr: null
description: ''
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/HookResponse'
description: ''
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
components:
schemas:
Error406:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorCode406Enum'
detail:
type: string
attr:
type:
- string
- 'null'
required:
- attr
- code
- detail
Error400:
type: object
properties:
code:
type: string
description: Error code. The examples list common validation and parse error codes.
examples:
- blank
- date
- datetime
- does_not_exist
- empty
- incorrect_match
- incorrect_type
- invalid
- invalid_choice
- invalid_image
- invalid_list
- make_aware
- max_length
- max_string_length
- max_value
- min_value
- no_match
- no_name
- not_a_list
- 'null'
- null_characters_not_allowed
- overflow
- parse_error
- required
- surrogate_characters_not_allowed
- unique
detail:
type: string
attr:
type:
- string
- 'null'
required:
- attr
- code
- detail
ErrorResponse400TypeEnum:
enum:
- validation_error
- client_error
type: string
description: '* `validation_error` - Validation Error
* `client_error` - Client Error'
Error423:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorCode423Enum'
detail:
type: string
attr:
type:
- string
- 'null'
required:
- attr
- code
- detail
ErrorCode500Enum:
enum:
- error
type: string
description: '* `error` - Error'
ErrorResponse423:
type: object
properties:
type:
$ref: '#/components/schemas/ServerErrorEnum'
errors:
type: array
items:
$ref: '#/components/schemas/Error423'
required:
- errors
- type
ServerErrorEnum:
enum:
- server_error
type: string
description: '* `server_error` - Server Error'
HookResponse:
type: object
properties:
message:
type: string
maxLength: 200
status:
$ref: '#/components/schemas/StatusEnum'
match_status:
$ref: '#/components/schemas/HookMatch'
updated_components:
type: array
items:
type: string
format: uri
readOnly: true
required:
- message
- status
- updated_components
ClientErrorEnum:
enum:
- client_error
type: string
description: '* `client_error` - Client Error'
ErrorResponse400:
type: object
properties:
type:
$ref: '#/components/schemas/ErrorResponse400TypeEnum'
errors:
type: array
items:
$ref: '#/components/schemas/Error400'
required:
- errors
- type
ErrorResponse405:
type: object
properties:
type:
$ref: '#/components/schemas/ClientErrorEnum'
errors:
type: array
items:
$ref: '#/components/schemas/Error405'
required:
- errors
- type
Error500:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorCode500Enum'
detail:
type: string
attr:
type:
- string
- 'null'
required:
- attr
- code
- detail
ErrorCode406Enum:
enum:
- not_acceptable
type: string
description: '* `not_acceptable` - Not Acceptable'
Error405:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorCode405Enum'
detail:
type: string
attr:
type:
- string
- 'null'
required:
- attr
- code
- detail
Error404:
type: object
properties:
code:
$ref: '#/components/schemas/ErrorCode404Enum'
detail:
type: string
attr:
type:
- string
- 'null'
required:
- attr
- code
- detail
StatusEnum:
enum:
- success
- failure
type: string
description: '* `success` - success
* `failure` - failure'
ErrorCode423Enum:
enum:
- repository-locked
- component-locked
- unknown-locked
type: string
description: '* `repository-locked` - Repository Locked
* `component-locked` - Component Locked
* `unknown-locked` - Unknown Locked'
ErrorResponse404:
type: object
properties:
type:
$ref: '#/components/schemas/ClientErrorEnum'
errors:
type: array
items:
$ref: '#/components/schemas/Error404'
required:
- errors
- type
HookMatch:
type: object
properties:
repository_matches:
type: integer
branch_matches:
type: integer
enabled_hook_matches:
type: integer
required:
- branch_matches
- enabled_hook_matches
- repository_matches
ErrorResponse500:
type: object
properties:
type:
$ref: '#/components/schemas/ServerErrorEnum'
errors:
type: array
items:
$ref: '#/components/schemas/Error500'
required:
- errors
- type
ErrorResponse406:
type: object
properties:
type:
$ref: '#/components/schemas/ClientErrorEnum'
errors:
type: array
items:
$ref: '#/components/schemas/Error406'
required:
- errors
- type
ErrorCode405Enum:
enum:
- method_not_allowed
type: string
description: '* `method_not_allowed` - Method Not Allowed'
ErrorCode404Enum:
enum:
- not_found
type: string
description: '* `not_found` - Not Found'
headers:
X-RateLimit-Remaining:
schema:
type: integer
description: Remaining number of requests to perform
required: true
X-RateLimit-Reset:
schema:
type: integer
description: Number of seconds until the rate-limit window resets
required: true
X-RateLimit-Limit:
schema:
type: integer
description: Allowed number of requests to perform
required: true
securitySchemes:
bearerAuth:
type: apiKey
in: header
name: Bearer
description: "Token-based authentication with required prefix `Bearer`.\n\n- Each user has a personal access token which they can get from their respective user profile. These tokens have the `wlu_` prefix.\n- It is possible to create project tokens whose access to the API is limited to operations to their associated project. These tokens have the `wlp_` prefix.\n "
cookieAuth:
type: apiKey
in: cookie
name: sessionid
description: Session-based authentication used when user is signed in.
tokenAuth:
type: apiKey
in: header
name: Token
description: "Token-based authentication with required prefix `Token`.\n\n- Each user has a personal access token which they can get from their respective user profile. These tokens have the `wlu_` prefix.\n- It is possible to create project tokens whose access to the API is limited to operations to their associated project. These tokens have the `wlp_` prefix.\n "
externalDocs:
url: https://docs.weblate.org/en/latest/index.html
description: Official Weblate documentation