Skip to content

Make a webhook

POST
/v1/webhooks
curl --request POST \
--url https://api.blupinta.app/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "url": "example", "events": [ "revision.saved" ] }'

An HTTPS address of the app’s, on the public internet, that Blupinta posts each event of the projects the app reaches to (V1WebhookBody), signed: Blupinta-Signature: t=<seconds>,v1=<hex> is the HMAC-SHA256 of <t>.<body> with the webhook’s secret, given only now. Answer 2xx within 10 seconds; anything else is tried again after 1 min, 5 min, 30 min, 2 h and 12 h. Three days of nothing but failures turn it off.

Idempotency-Key
string
<= 200 characters

Any unique text of the app’s, the same for a retry: the request is acted on once, its answer kept a day

Media typeapplication/json

A webhook to make: where to post, and which events (all of them when none is said)

object
url
required

An HTTPS address on the public internet

string
events
Array<string>
Allowed values: revision.saved access.revoked

Make a webhook

Media typeapplication/json

A webhook just made, with its secret: shown this once, to check each delivery’s Blupinta-Signature

object
secret
required
string
id
required
string
url
required
string
events
required
Array<string>
Allowed values: revision.saved access.revoked
createdAt
required
string
disabledAt
required

When it was turned off after three days of failing deliveries; null while on

string | null
disabledReason
required
string | null
Example
{
"events": [
"revision.saved"
]
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

invalid_input: What was sent isn’t right: problems says what, each with where

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

unauthenticated: No valid access token for this API

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

forbidden: The token lacks the scope this operation needs

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

rate_limited: Too many requests: wait as long as Retry-After says

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again

Retry-After
integer

Seconds to wait before asking again

server_error: Something failed on Blupinta’s side: quote errorId when asking for help

Media typeapplication/json

The body of a refusal

object
error
required

What /v1 answers when it refuses

string
Allowed values: unauthenticated forbidden not_found rate_limited server_error invalid_input conflict invalid_home blocking_problems unsupported_file
errorId

The server’s id for a server_error, to quote when asking for help

string
problems

What is wrong, for invalid_input, conflict, invalid_home, blocking_problems

Array<string>
Example
{
"error": "unauthenticated"
}
RateLimit-Limit
integer

The requests the caller may make in the window: an app counts per connection, every token together

RateLimit-Remaining
integer

The requests left in the window

RateLimit-Reset
integer

Seconds until the window starts again