`POST /v1/orgs/{org}/signing-keys/endorse`.
const url = 'https://api.updawg.net/v1/orgs/example/signing-keys/endorse';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"endorsement":{"signature":"example","statement":"example"},"proof":{"signature":"example","statement":"example"}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.updawg.net/v1/orgs/example/signing-keys/endorse \ --header 'Content-Type: application/json' \ --data '{ "endorsement": { "signature": "example", "statement": "example" }, "proof": { "signature": "example", "statement": "example" } }'Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Organization slug.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Your active key endorsing the next one, from updawgctl endorse.
Required; optional here only so a missing one is answered after the
permission check.
object
Base64 Ed25519 signature over updawg-endorsement-v1\0 and statement.
The statement’s canonical JSON, exactly as signed.
The next key proving its holder can sign with it, from updawgctl prove-key. Required, for the reason a hand-over requires one.
object
Base64 Ed25519 signature over updawg-endorsement-v1\0 and statement.
The statement’s canonical JSON, exactly as signed.
Example generated
{ "endorsement": { "signature": "example", "statement": "example" }, "proof": { "signature": "example", "statement": "example" }}Responses
Section titled “Responses”Your next key is the active one, endorsed by the one before, which is retiring. Hosts adopt it at their next certificate renewal; jobs wait for it in updawgctl sign from now on. Retire the previous key once every host pins the new one.
object
The key it replaced, now retiring.
The new active key.
Example generated
{ "from": "example", "key": "example"}No endorsement or proof, or one that does not hold: wrong organization, too old, about different keys, or a signature that does not verify under your active key.
object
Example generated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}No session.
object
Example generated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}Not permitted for this role. Or the plan does not include customer-held signing keys (Enterprise): plan-required.
object
Example generated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}No such organization, or not yours — one answer for both.
object
Example generated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}No active key, Updawg holds it (rotate it, or hand over to yours), the endorsement is by a key that is not the active one, or the next key is already one of the organization’s.
object
Example generated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}The organization’s data is in another region (wrong-region, DAWG-159). detail names that region’s API; send the request there.
object
Example generated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}Over the organization’s request limit. Retry-After says when to try again; RateLimit-Limit is the burst.
object
Example generated
{ "detail": "example", "status": 1, "title": "example", "type": "example"}