Skip to content

Fixes: what needs doing

GET
/api/v1/fixes
curl --request GET \
--url http://localhost:3000/api/v1/fixes \
--header 'Authorization: Bearer <token>'

One list of what to act on in the project, from what Insights and the library know: places still loading a replaced version (tell them with POST /api/v1/insights/notices), searches that found nothing (ask for the file with an upload link, POST /api/v1/shares) and approved assets whose license ends within 30 days, with what replaced them. Each says whether it was done; open counts the rest.

Scope: write.

Fixes

Media typeapplication/json
object
data
required
object
days
required

How far back stale and gaps go

integer
>= -9007199254740991 <= 9007199254740991
licenseDays
required

How far ahead licenses are listed

integer
>= -9007199254740991 <= 9007199254740991
open
required

What isn’t done yet: places not told, searches not requested, licenses ending with nothing to replace them, sites on an old component

integer
>= -9007199254740991 <= 9007199254740991
stale
required

Places still loading a replaced version, as Insights has them: done once notified

Array<object>
object
asset
required
object
id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
title
required
string
version
required
Any of:
integer
>= -9007199254740991 <= 9007199254740991
preview
required

Whether /a/{id} can make a picture of it

boolean
supersededBy
required
Any of:
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
replacement
required
Any of:
object
id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
title
required
string
version
required
Any of:
integer
>= -9007199254740991 <= 9007199254740991
preview
required

Whether /a/{id} can make a picture of it

boolean
supersededBy
required
Any of:
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
referrer
required

The host that loaded it; null when the request didn’t say

string | null
client
required

The agent’s key name that fetched it; null for a person or nobody in particular

string | null
fetches
required
integer
>= -9007199254740991 <= 9007199254740991
first
required

The first day it was fetched, within days

string
last
required

The last day it was fetched

string
owners
required

People this server knows answer for the place (a site of this project’s admins, an agent’s person): who a notice reaches unasked

integer
>= -9007199254740991 <= 9007199254740991
notified
required
Any of:
object
at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
by
required
string
gaps
required

Searches that found nothing, as Insights has them: done once requested

Array<object>
object
q
required
string
searches
required
integer
>= -9007199254740991 <= 9007199254740991
first
required

The first day it found nothing, within days

string
last
required
string
requested
required
Any of:
object
at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
by
required
string
licenses
required

Approved assets whose license ends within licenseDays, soonest first

Array<object>
object
asset
required
object
id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
title
required
string
version
required
Any of:
integer
>= -9007199254740991 <= 9007199254740991
preview
required

Whether /a/{id} can make a picture of it

boolean
supersededBy
required
Any of:
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
expires
required

Its last day of use, YYYY-MM-DD

string
days
required

Days left until it, 0 on the day

integer
>= -9007199254740991 <= 9007199254740991
replacement
required
Any of:
object
id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
title
required
string
version
required
Any of:
integer
>= -9007199254740991 <= 9007199254740991
preview
required

Whether /a/{id} can make a picture of it

boolean
supersededBy
required
Any of:
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
components
required

This project’s live builds made with a component version a newer one replaced: done once deployed with the current one

Array<object>
object
site
required
object
id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
name
required
string
slug
required
string
path
required

Where the build is mounted

string
component
required

The version its manifest names

object
id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
name
required
string
version
required
integer
>= -9007199254740991 <= 9007199254740991
current
required

The version its Storybook shows now

object
id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
version
required
integer
>= -9007199254740991 <= 9007199254740991
since
required

When the current version came, ISO 8601

string
Examplegenerated
{
"data": {
"days": 1,
"licenseDays": 1,
"open": 1,
"stale": [
{
"asset": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"title": "example",
"version": 1,
"preview": true,
"supersededBy": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
},
"replacement": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"title": "example",
"version": 1,
"preview": true,
"supersededBy": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
},
"referrer": "example",
"client": "example",
"fetches": 1,
"first": "example",
"last": "example",
"owners": 1,
"notified": {
"at": "2026-04-15T12:00:00Z",
"by": "example"
}
}
],
"gaps": [
{
"q": "example",
"searches": 1,
"first": "example",
"last": "example",
"requested": {
"at": "2026-04-15T12:00:00Z",
"by": "example"
}
}
],
"licenses": [
{
"asset": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"title": "example",
"version": 1,
"preview": true,
"supersededBy": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
},
"expires": "example",
"days": 1,
"replacement": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"title": "example",
"version": 1,
"preview": true,
"supersededBy": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
}
}
],
"components": [
{
"site": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"name": "example",
"slug": "example"
},
"path": "example",
"component": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"name": "example",
"version": 1
},
"current": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"version": 1
},
"since": "example"
}
]
}
}

An error

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
detail
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"detail": "example"
}
}