{"openapi":"3.1.0","info":{"title":"EverStamp API","version":"1","summary":"Prepare orders, read dossiers, manage projects and checklists for your organisation.","description":"Everything the dashboard can do, your own software can do too. One API key acts for one organisation with the rights of an administrator. Evidence never travels through this API: a dossier stays on the phone that made it, the register records that it exists, and anyone verifies on everstamp.app/verify without us.","contact":{"name":"EverStamp","email":"privacy@everstamp.app","url":"https://everstamp.app"},"x-contract":{"format":"everstamp/3","fingerprint":"7954e24f8f6c3b19","model":"efc262326adc0638"}},"servers":[{"url":"https://api.everstamp.app","description":"production"}],"security":[{"apiKey":[]}],"tags":[{"name":"Orders","description":"What the office prepares and a field worker picks up in the app. The status comes from the register: prepared, claimed (picked up), registered, cancelled."},{"name":"Dossiers","description":"Every dossier the phones of the organisation registered: who, when, and whether the register has stamped the period yet."},{"name":"Projects","description":"A name or address that orders and dossiers belong to. Context, never evidence."},{"name":"Checklists","description":"The steps a dossier follows: built in from the library, or your own. A published version never changes."},{"name":"People and devices","description":"Members of the organisation and the phones linked to them."}],"paths":{"/v1/orders":{"get":{"tags":["Orders"],"summary":"List orders","operationId":"listOrders","parameters":[{"name":"status","in":"query","required":false,"description":"comma-separated: prepared, claimed, registered, cancelled","schema":{"type":"string"}},{"name":"project","in":"query","required":false,"description":"only orders of this project (ulid)","schema":{"type":"string"}},{"name":"archived","in":"query","required":false,"description":"1 to include archived orders","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["format","orders"],"properties":{"format":{"const":"everstamp/3","description":"always \"everstamp/3\""},"orders":{"type":"array","maxItems":500,"items":{"type":"object","additionalProperties":false,"required":["id","organisation","title","template","member","memberName","createdAt","status"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"title":{"type":"string","maxLength":200,"minLength":1,"description":"name of the dossier as the app shows it"},"address":{"type":"string","maxLength":200,"description":"address, on the stamp bar"},"note":{"type":"string","maxLength":2000,"description":"a note for the field worker"},"template":{"type":"object","additionalProperties":false,"required":["name","version"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"}}},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member the order is for (member id from GET /v1/members); every phone of that member sees it"},"memberName":{"type":"string","maxLength":200,"minLength":1,"description":"that member's name"},"due":{"type":"string","format":"date-time","description":"wanted by (ISO 8601)"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"createdBy":{"type":"string","maxLength":200,"description":"who created it, as free text"},"status":{"type":"string","enum":["prepared","claimed","registered","cancelled"],"description":"prepared, claimed (at least one phone picked it up), registered (every pickup is in the register) or cancelled; always from the register, never from a message by the app"},"claimedAt":{"type":"string","format":"date-time","description":"first pickup"},"claimedBy":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"device of the first pickup (sha-256 of the key id)"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"registeredAt":{"type":"string","format":"date-time","description":"when the first dossier was registered"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of that dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of that dossier"},"cancelledAt":{"type":"string","format":"date-time","description":"withdrawn on"},"cancelReason":{"type":"string","maxLength":2000,"description":"why it was withdrawn"},"project":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"project id (ulid)"},"projectName":{"type":"string","maxLength":200,"description":"filled in from the project when omitted"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"stampBar":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","minItems":1,"maxItems":9,"uniqueItems":true,"items":{"type":"string","enum":["time","address","position","dossier","project","step","operator","organisation","note"]},"description":"lines on the bar, in order: time, address, position, dossier, project, step, operator, organisation, note"},"position":{"type":"string","enum":["bottom","top"],"description":"bottom or top"},"theme":{"type":"string","enum":["dark","light"],"description":"dark bar with light text, or light"},"size":{"type":"string","enum":["small","medium","large"],"description":"small, medium or large"},"name":{"type":"string","maxLength":100,"description":"a name for this layout"}}},"claims":{"type":"array","maxItems":50,"items":{"type":"object","additionalProperties":false,"required":["device","dossier","claimedAt"],"properties":{"device":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"the phone (sha-256 of its key id)"},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member that phone belonged to at the time"},"memberName":{"type":"string","maxLength":200,"description":"their name"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"claimedAt":{"type":"string","format":"date-time","description":"picked up on"},"registeredAt":{"type":"string","format":"date-time","description":"registered on"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of the dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of the dossier"}}}},"archivedAt":{"type":"string","format":"date-time","description":"archived on the dashboard: out of view, not deleted"}}}}}}}}},"400":{"description":"bad filter","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}},"401":{"description":"missing or unknown key","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}}}},"post":{"tags":["Opdrachten"],"summary":"Prepare an order","operationId":"createOrder","description":"The order appears in the app of the member you assign it to. `member` is a member id from GET /v1/members; the API fills in `memberName`. `template` is {name, version}: a built-in checklist from the library or one of your own.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["title","template","member"],"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"description":"name of the dossier as the app shows it"},"address":{"type":"string","maxLength":200,"description":"address, on the stamp bar"},"note":{"type":"string","maxLength":2000,"description":"a note for the field worker"},"template":{"type":"object","additionalProperties":false,"required":["name","version"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"}}},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member the order is for (member id from GET /v1/members); every phone of that member sees it"},"due":{"type":"string","format":"date-time","description":"wanted by (ISO 8601)"},"stampBar":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","minItems":1,"maxItems":9,"uniqueItems":true,"items":{"type":"string","enum":["time","address","position","dossier","project","step","operator","organisation","note"]},"description":"lines on the bar, in order: time, address, position, dossier, project, step, operator, organisation, note"},"position":{"type":"string","enum":["bottom","top"],"description":"bottom or top"},"theme":{"type":"string","enum":["dark","light"],"description":"dark bar with light text, or light"},"size":{"type":"string","enum":["small","medium","large"],"description":"small, medium or large"},"name":{"type":"string","maxLength":100,"description":"a name for this layout"}}},"project":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"project id (ulid)"},"projectName":{"type":"string","maxLength":200,"description":"filled in from the project when omitted"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"}}}}}},"responses":{"201":{"description":"prepared","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["order"],"properties":{"order":{"type":"object","additionalProperties":false,"required":["id","organisation","title","template","member","memberName","createdAt","status"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"title":{"type":"string","maxLength":200,"minLength":1,"description":"name of the dossier as the app shows it"},"address":{"type":"string","maxLength":200,"description":"address, on the stamp bar"},"note":{"type":"string","maxLength":2000,"description":"a note for the field worker"},"template":{"type":"object","additionalProperties":false,"required":["name","version"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"}}},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member the order is for (member id from GET /v1/members); every phone of that member sees it"},"memberName":{"type":"string","maxLength":200,"minLength":1,"description":"that member's name"},"due":{"type":"string","format":"date-time","description":"wanted by (ISO 8601)"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"createdBy":{"type":"string","maxLength":200,"description":"who created it, as free text"},"status":{"type":"string","enum":["prepared","claimed","registered","cancelled"],"description":"prepared, claimed (at least one phone picked it up), registered (every pickup is in the register) or cancelled; always from the register, never from a message by the app"},"claimedAt":{"type":"string","format":"date-time","description":"first pickup"},"claimedBy":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"device of the first pickup (sha-256 of the key id)"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"registeredAt":{"type":"string","format":"date-time","description":"when the first dossier was registered"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of that dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of that dossier"},"cancelledAt":{"type":"string","format":"date-time","description":"withdrawn on"},"cancelReason":{"type":"string","maxLength":2000,"description":"why it was withdrawn"},"project":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"project id (ulid)"},"projectName":{"type":"string","maxLength":200,"description":"filled in from the project when omitted"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"stampBar":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","minItems":1,"maxItems":9,"uniqueItems":true,"items":{"type":"string","enum":["time","address","position","dossier","project","step","operator","organisation","note"]},"description":"lines on the bar, in order: time, address, position, dossier, project, step, operator, organisation, note"},"position":{"type":"string","enum":["bottom","top"],"description":"bottom or top"},"theme":{"type":"string","enum":["dark","light"],"description":"dark bar with light text, or light"},"size":{"type":"string","enum":["small","medium","large"],"description":"small, medium or large"},"name":{"type":"string","maxLength":100,"description":"a name for this layout"}}},"claims":{"type":"array","maxItems":50,"items":{"type":"object","additionalProperties":false,"required":["device","dossier","claimedAt"],"properties":{"device":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"the phone (sha-256 of its key id)"},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member that phone belonged to at the time"},"memberName":{"type":"string","maxLength":200,"description":"their name"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"claimedAt":{"type":"string","format":"date-time","description":"picked up on"},"registeredAt":{"type":"string","format":"date-time","description":"registered on"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of the dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of the dossier"}}}},"archivedAt":{"type":"string","format":"date-time","description":"archived on the dashboard: out of view, not deleted"}}}}}}}},"400":{"description":"invalid body","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}},"422":{"description":"unknown member, checklist or project","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}}}}},"/v1/orders/{id}":{"get":{"tags":["Opdrachten"],"summary":"One order","operationId":"getOrder","parameters":[{"name":"id","in":"path","required":true,"description":"the id (ulid)","schema":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["order"],"properties":{"order":{"type":"object","additionalProperties":false,"required":["id","organisation","title","template","member","memberName","createdAt","status"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"title":{"type":"string","maxLength":200,"minLength":1,"description":"name of the dossier as the app shows it"},"address":{"type":"string","maxLength":200,"description":"address, on the stamp bar"},"note":{"type":"string","maxLength":2000,"description":"a note for the field worker"},"template":{"type":"object","additionalProperties":false,"required":["name","version"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"}}},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member the order is for (member id from GET /v1/members); every phone of that member sees it"},"memberName":{"type":"string","maxLength":200,"minLength":1,"description":"that member's name"},"due":{"type":"string","format":"date-time","description":"wanted by (ISO 8601)"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"createdBy":{"type":"string","maxLength":200,"description":"who created it, as free text"},"status":{"type":"string","enum":["prepared","claimed","registered","cancelled"],"description":"prepared, claimed (at least one phone picked it up), registered (every pickup is in the register) or cancelled; always from the register, never from a message by the app"},"claimedAt":{"type":"string","format":"date-time","description":"first pickup"},"claimedBy":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"device of the first pickup (sha-256 of the key id)"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"registeredAt":{"type":"string","format":"date-time","description":"when the first dossier was registered"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of that dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of that dossier"},"cancelledAt":{"type":"string","format":"date-time","description":"withdrawn on"},"cancelReason":{"type":"string","maxLength":2000,"description":"why it was withdrawn"},"project":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"project id (ulid)"},"projectName":{"type":"string","maxLength":200,"description":"filled in from the project when omitted"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"stampBar":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","minItems":1,"maxItems":9,"uniqueItems":true,"items":{"type":"string","enum":["time","address","position","dossier","project","step","operator","organisation","note"]},"description":"lines on the bar, in order: time, address, position, dossier, project, step, operator, organisation, note"},"position":{"type":"string","enum":["bottom","top"],"description":"bottom or top"},"theme":{"type":"string","enum":["dark","light"],"description":"dark bar with light text, or light"},"size":{"type":"string","enum":["small","medium","large"],"description":"small, medium or large"},"name":{"type":"string","maxLength":100,"description":"a name for this layout"}}},"claims":{"type":"array","maxItems":50,"items":{"type":"object","additionalProperties":false,"required":["device","dossier","claimedAt"],"properties":{"device":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"the phone (sha-256 of its key id)"},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member that phone belonged to at the time"},"memberName":{"type":"string","maxLength":200,"description":"their name"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"claimedAt":{"type":"string","format":"date-time","description":"picked up on"},"registeredAt":{"type":"string","format":"date-time","description":"registered on"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of the dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of the dossier"}}}},"archivedAt":{"type":"string","format":"date-time","description":"archived on the dashboard: out of view, not deleted"}}}}}}}},"404":{"description":"no such order in this organisation","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}}}},"post":{"tags":["Opdrachten"],"summary":"Change a prepared order","operationId":"updateOrder","description":"Only while the order is prepared; once a phone picked it up the dossier exists and the order is fixed (409 order-claimed). Send only the fields you change. `clearProject: true` removes the project, `tags: []` removes the labels.","parameters":[{"name":"id","in":"path","required":true,"description":"the id (ulid)","schema":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"description":"name of the dossier as the app shows it"},"address":{"type":"string","maxLength":200,"description":"address, on the stamp bar"},"note":{"type":"string","maxLength":2000,"description":"a note for the field worker"},"template":{"type":"object","additionalProperties":false,"required":["name","version"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"}}},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member the order is for (member id from GET /v1/members); every phone of that member sees it"},"due":{"type":"string","format":"date-time","description":"wanted by (ISO 8601)"},"stampBar":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","minItems":1,"maxItems":9,"uniqueItems":true,"items":{"type":"string","enum":["time","address","position","dossier","project","step","operator","organisation","note"]},"description":"lines on the bar, in order: time, address, position, dossier, project, step, operator, organisation, note"},"position":{"type":"string","enum":["bottom","top"],"description":"bottom or top"},"theme":{"type":"string","enum":["dark","light"],"description":"dark bar with light text, or light"},"size":{"type":"string","enum":["small","medium","large"],"description":"small, medium or large"},"name":{"type":"string","maxLength":100,"description":"a name for this layout"}}},"clearStampBar":{"type":"boolean","description":"true removes the order's own stamp-bar layout"},"clearProject":{"type":"boolean","description":"true removes the order from its project"},"project":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"project id (ulid)"},"projectName":{"type":"string","maxLength":200,"description":"filled in from the project when omitted"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["order"],"properties":{"order":{"type":"object","additionalProperties":false,"required":["id","organisation","title","template","member","memberName","createdAt","status"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"title":{"type":"string","maxLength":200,"minLength":1,"description":"name of the dossier as the app shows it"},"address":{"type":"string","maxLength":200,"description":"address, on the stamp bar"},"note":{"type":"string","maxLength":2000,"description":"a note for the field worker"},"template":{"type":"object","additionalProperties":false,"required":["name","version"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"}}},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member the order is for (member id from GET /v1/members); every phone of that member sees it"},"memberName":{"type":"string","maxLength":200,"minLength":1,"description":"that member's name"},"due":{"type":"string","format":"date-time","description":"wanted by (ISO 8601)"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"createdBy":{"type":"string","maxLength":200,"description":"who created it, as free text"},"status":{"type":"string","enum":["prepared","claimed","registered","cancelled"],"description":"prepared, claimed (at least one phone picked it up), registered (every pickup is in the register) or cancelled; always from the register, never from a message by the app"},"claimedAt":{"type":"string","format":"date-time","description":"first pickup"},"claimedBy":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"device of the first pickup (sha-256 of the key id)"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"registeredAt":{"type":"string","format":"date-time","description":"when the first dossier was registered"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of that dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of that dossier"},"cancelledAt":{"type":"string","format":"date-time","description":"withdrawn on"},"cancelReason":{"type":"string","maxLength":2000,"description":"why it was withdrawn"},"project":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"project id (ulid)"},"projectName":{"type":"string","maxLength":200,"description":"filled in from the project when omitted"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"stampBar":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","minItems":1,"maxItems":9,"uniqueItems":true,"items":{"type":"string","enum":["time","address","position","dossier","project","step","operator","organisation","note"]},"description":"lines on the bar, in order: time, address, position, dossier, project, step, operator, organisation, note"},"position":{"type":"string","enum":["bottom","top"],"description":"bottom or top"},"theme":{"type":"string","enum":["dark","light"],"description":"dark bar with light text, or light"},"size":{"type":"string","enum":["small","medium","large"],"description":"small, medium or large"},"name":{"type":"string","maxLength":100,"description":"a name for this layout"}}},"claims":{"type":"array","maxItems":50,"items":{"type":"object","additionalProperties":false,"required":["device","dossier","claimedAt"],"properties":{"device":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"the phone (sha-256 of its key id)"},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member that phone belonged to at the time"},"memberName":{"type":"string","maxLength":200,"description":"their name"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"claimedAt":{"type":"string","format":"date-time","description":"picked up on"},"registeredAt":{"type":"string","format":"date-time","description":"registered on"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of the dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of the dossier"}}}},"archivedAt":{"type":"string","format":"date-time","description":"archived on the dashboard: out of view, not deleted"}}}}}}}},"404":{"description":"no such order","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}},"409":{"description":"order-claimed or order-cancelled","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}}}}},"/v1/orders/{id}/cancel":{"post":{"tags":["Opdrachten"],"summary":"Withdraw a prepared order","operationId":"cancelOrder","parameters":[{"name":"id","in":"path","required":true,"description":"the id (ulid)","schema":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"reason":{"type":"string","maxLength":2000,"description":"why (optional)"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["id","cancelledAt"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"cancelledAt":{"type":"string","format":"date-time","description":"withdrawn on"}}}}}},"409":{"description":"already picked up","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}}}}},"/v1/projects":{"get":{"tags":["Projects"],"summary":"List projects","operationId":"listProjects","parameters":[{"name":"archived","in":"query","required":false,"description":"1 to include archived projects","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["format","projects"],"properties":{"format":{"const":"everstamp/3","description":"always \"everstamp/3\""},"projects":{"type":"array","maxItems":500,"items":{"type":"object","additionalProperties":false,"required":["id","organisation","name","createdAt"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"name":{"type":"string","maxLength":200,"minLength":1,"description":"name or address"},"address":{"type":"string","maxLength":200,"description":"address, when the name is not one"},"note":{"type":"string","maxLength":2000,"description":"note"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"createdBy":{"type":"string","maxLength":200,"description":"who created it, as free text"},"archivedAt":{"type":"string","format":"date-time","description":"archived on the dashboard: out of view, not deleted"},"orders":{"type":"integer","minimum":0},"dossiers":{"type":"integer","minimum":0,"description":"the dossiers, newest first"}}}}}}}}}}},"post":{"tags":["Projecten"],"summary":"Create a project","operationId":"createProject","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"description":"name or address"},"address":{"type":"string","maxLength":200,"description":"address, when the name is not one"},"note":{"type":"string","maxLength":2000,"description":"note"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"}}}}}},"responses":{"201":{"description":"created","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["project"],"properties":{"project":{"type":"object","additionalProperties":false,"required":["id","organisation","name","createdAt"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"name":{"type":"string","maxLength":200,"minLength":1,"description":"name or address"},"address":{"type":"string","maxLength":200,"description":"address, when the name is not one"},"note":{"type":"string","maxLength":2000,"description":"note"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"createdBy":{"type":"string","maxLength":200,"description":"who created it, as free text"},"archivedAt":{"type":"string","format":"date-time","description":"archived on the dashboard: out of view, not deleted"},"orders":{"type":"integer","minimum":0},"dossiers":{"type":"integer","minimum":0,"description":"the dossiers, newest first"}},"description":"project id (ulid)"}}}}}},"400":{"description":"invalid body","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}}}}},"/v1/templates":{"get":{"tags":["Checklists"],"summary":"List checklists","operationId":"listTemplates","description":"Your own checklists (every version, retired ones marked) followed by the built-in library.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["format","templates"],"properties":{"format":{"const":"everstamp/3","description":"always \"everstamp/3\""},"templates":{"type":"array","maxItems":200,"items":{"title":"EverStamp sjabloon","type":"object","additionalProperties":false,"required":["name","version","mode","title","subtitle","steps"],"properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"retired":{"type":"boolean","description":"true when retired: still readable for old dossiers, not offered for new ones"},"mode":{"type":"string","enum":["strict","free"],"description":"strict (the app only closes a dossier when every step has its minimum) or free (the steps are a guide)"},"industries":{"type":"array","minItems":1,"maxItems":7,"items":{"type":"string","enum":["construction","automotive","property","claims","logistics","maintenance","general"]},"description":"industries this built-in checklist belongs to"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language, for example {\"en\": \"Handover\", \"nl\": \"Oplevering\"}"},"subtitle":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"subtitle per language"},"steps":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["id","title","required"],"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"step id: lower case, digits and dashes; unique within the checklist"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language"},"required":{"type":"integer","minimum":0,"maximum":99,"description":"minimum number of captures in this step; 0 is optional"},"shots":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"shot id"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language"}}}}}}}}}}}}}}}}},"post":{"tags":["Checklists"],"summary":"Publish a checklist version","operationId":"createTemplate","description":"Publishing is always a new version; the API assigns the number. Texts are per language (at least one). `mode` is strict (the app only closes a dossier when every step has its minimum) or free.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"title":"EverStamp sjabloon","type":"object","additionalProperties":false,"required":["name","mode","title","subtitle","steps"],"properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"machine name: lower case, digits and dashes; fixed after publishing"},"mode":{"type":"string","enum":["strict","free"],"description":"strict (the app only closes a dossier when every step has its minimum) or free (the steps are a guide)"},"industries":{"type":"array","minItems":1,"maxItems":7,"items":{"type":"string","enum":["construction","automotive","property","claims","logistics","maintenance","general"]},"description":"industries this built-in checklist belongs to"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language, for example {\"en\": \"Handover\", \"nl\": \"Oplevering\"}"},"subtitle":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"subtitle per language"},"steps":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["id","title","required"],"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"step id: lower case, digits and dashes; unique within the checklist"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language"},"required":{"type":"integer","minimum":0,"maximum":99,"description":"minimum number of captures in this step; 0 is optional"},"shots":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"shot id"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language"}}}}}}}}}}}}}},"responses":{"201":{"description":"published","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"title":"EverStamp sjabloon","type":"object","additionalProperties":false,"required":["name","version","mode","title","subtitle","steps"],"properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"retired":{"type":"boolean","description":"true when retired: still readable for old dossiers, not offered for new ones"},"mode":{"type":"string","enum":["strict","free"],"description":"strict (the app only closes a dossier when every step has its minimum) or free (the steps are a guide)"},"industries":{"type":"array","minItems":1,"maxItems":7,"items":{"type":"string","enum":["construction","automotive","property","claims","logistics","maintenance","general"]},"description":"industries this built-in checklist belongs to"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language, for example {\"en\": \"Handover\", \"nl\": \"Oplevering\"}"},"subtitle":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"subtitle per language"},"steps":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["id","title","required"],"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"step id: lower case, digits and dashes; unique within the checklist"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language"},"required":{"type":"integer","minimum":0,"maximum":99,"description":"minimum number of captures in this step; 0 is optional"},"shots":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"shot id"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language"}}}}}}}}}}}}}},"400":{"description":"invalid checklist","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}},"409":{"description":"name of a built-in checklist","content":{"application/json":{"schema":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}}}}}}}},"/v1/dossiers":{"get":{"tags":["Dossiers"],"summary":"List registered dossiers","operationId":"listDossiers","description":"Newest first, 100 per page; pass the `registeredAt` of the last one as `before` for the next page. Each entry says whether the register has stamped the period (`closed`), the order it came from, its project, labels and predecessor.","parameters":[{"name":"before","in":"query","required":false,"description":"paging: dossiers registered before this moment (ISO 8601)","schema":{"type":"string"}},{"name":"project","in":"query","required":false,"description":"only dossiers of this project (ulid)","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["format","dossiers","more"],"properties":{"format":{"const":"everstamp/3","description":"always \"everstamp/3\""},"dossiers":{"type":"array","maxItems":500,"items":{"type":"object","additionalProperties":false,"required":["dossier","root","device","stampedAt","registeredAt","period","closed"],"properties":{"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash over all captures (sha-256, hex)"},"device":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"the phone (sha-256 of its key id)"},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member the phone belonged to at registration"},"memberName":{"type":"string","maxLength":200,"description":"their name"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of the dossier"},"registeredAt":{"type":"string","format":"date-time","description":"when the register recorded it"},"period":{"type":"string","maxLength":200,"description":"the register period (hour or day) the row is in"},"closed":{"type":"boolean","description":"true when the register has stamped that period: the proof exists"},"order":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$"},"project":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"project id (ulid)"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"predecessor":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of the previous dossier when this is a follow-up"},"title":{"type":"string","maxLength":200,"description":"name of the dossier: from the registration, else the order title"},"template":{"type":"object","additionalProperties":false,"required":["name","version"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"}}}}},"description":"the dossiers, newest first"},"more":{"type":"boolean","description":"true when there is another page"}}}}}}}}},"/v1/members":{"get":{"tags":["People and devices"],"summary":"List members","operationId":"listMembers","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["format","members"],"properties":{"format":{"const":"everstamp/3"},"members":{"type":"array","items":{"type":"object","required":["id","email","name","role","active"],"properties":{"id":{"type":"string","description":"member id (ulid); use it as `member` when preparing an order"},"organisation_id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","admin","worker","reader"]},"invited_at":{"type":"string","format":"date-time"},"accepted_at":{"type":["string","null"],"format":"date-time"},"active":{"type":"boolean"}}}}}}}}}}}},"/v1/devices":{"get":{"tags":["Mensen en toestellen"],"summary":"Linked phones and open device codes","operationId":"listDevices","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["format","enrolments","invitations"],"properties":{"format":{"const":"everstamp/3","description":"always \"everstamp/3\""},"enrolments":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["device","organisation","member","invitation","enrolledAt"],"properties":{"device":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"the phone (sha-256 of its key id)"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"member id"},"invitation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the device code that linked it"},"enrolledAt":{"type":"string","format":"date-time","description":"linked on"},"revokedAt":{"type":"string","format":"date-time","description":"unlinked on"}}}},"invitations":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","organisation","organisationName","member","memberName","createdAt","expiresAt"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"organisationName":{"type":"string","maxLength":200,"minLength":1,"description":"organisation name"},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"member the code is for"},"memberName":{"type":"string","maxLength":200,"minLength":1,"description":"their name"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"expiresAt":{"type":"string","format":"date-time","description":"valid until"},"usedAt":{"type":"string","format":"date-time","description":"used on"},"usedBy":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"the phone that used it"},"cancelledAt":{"type":"string","format":"date-time","description":"withdrawn on"}}}}}}}}}}}}},"webhooks":{"0":{"post":{"summary":"0","description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["format","event","at","organisation","data"],"properties":{"format":{"const":"everstamp/3"},"event":{"const":"0"},"at":{"type":"string","format":"date-time"},"organisation":{"type":"string"},"data":{"type":"object","description":"{ enrolment }"}}}}}},"responses":{"200":{"description":"any 2xx counts as delivered; anything else is retried after 1, 5, 30 minutes, 2 and 12 hours, and after eight failures in a row the webhook switches off"}}}},"1":{"post":{"summary":"1","description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["format","event","at","organisation","data"],"properties":{"format":{"const":"everstamp/3"},"event":{"const":"1"},"at":{"type":"string","format":"date-time"},"organisation":{"type":"string"},"data":{"type":"object","description":"{ enrolment }"}}}}}},"responses":{"200":{"description":"any 2xx counts as delivered; anything else is retried after 1, 5, 30 minutes, 2 and 12 hours, and after eight failures in a row the webhook switches off"}}}},"2":{"post":{"summary":"2","description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["format","event","at","organisation","data"],"properties":{"format":{"const":"everstamp/3"},"event":{"const":"2"},"at":{"type":"string","format":"date-time"},"organisation":{"type":"string"},"data":{"type":"object","description":"{ enrolment }"}}}}}},"responses":{"200":{"description":"any 2xx counts as delivered; anything else is retried after 1, 5, 30 minutes, 2 and 12 hours, and after eight failures in a row the webhook switches off"}}}},"3":{"post":{"summary":"3","description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["format","event","at","organisation","data"],"properties":{"format":{"const":"everstamp/3"},"event":{"const":"3"},"at":{"type":"string","format":"date-time"},"organisation":{"type":"string"},"data":{"type":"object","description":"{ enrolment }"}}}}}},"responses":{"200":{"description":"any 2xx counts as delivered; anything else is retried after 1, 5, 30 minutes, 2 and 12 hours, and after eight failures in a row the webhook switches off"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"An API key from the dashboard (Settings, Integrations): `esk_` followed by 32 characters. Send it as `Authorization: Bearer esk_...`. It acts for one organisation with the rights of an administrator."}},"schemas":{"Error":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","description":"a stable code, for example unknown-order"},"message":{"type":"string","description":"for humans; may change"}}},"Order":{"type":"object","additionalProperties":false,"required":["id","organisation","title","template","member","memberName","createdAt","status"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"title":{"type":"string","maxLength":200,"minLength":1,"description":"name of the dossier as the app shows it"},"address":{"type":"string","maxLength":200,"description":"address, on the stamp bar"},"note":{"type":"string","maxLength":2000,"description":"a note for the field worker"},"template":{"type":"object","additionalProperties":false,"required":["name","version"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"}}},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member the order is for (member id from GET /v1/members); every phone of that member sees it"},"memberName":{"type":"string","maxLength":200,"minLength":1,"description":"that member's name"},"due":{"type":"string","format":"date-time","description":"wanted by (ISO 8601)"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"createdBy":{"type":"string","maxLength":200,"description":"who created it, as free text"},"status":{"type":"string","enum":["prepared","claimed","registered","cancelled"],"description":"prepared, claimed (at least one phone picked it up), registered (every pickup is in the register) or cancelled; always from the register, never from a message by the app"},"claimedAt":{"type":"string","format":"date-time","description":"first pickup"},"claimedBy":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"device of the first pickup (sha-256 of the key id)"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"registeredAt":{"type":"string","format":"date-time","description":"when the first dossier was registered"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of that dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of that dossier"},"cancelledAt":{"type":"string","format":"date-time","description":"withdrawn on"},"cancelReason":{"type":"string","maxLength":2000,"description":"why it was withdrawn"},"project":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"project id (ulid)"},"projectName":{"type":"string","maxLength":200,"description":"filled in from the project when omitted"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"stampBar":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","minItems":1,"maxItems":9,"uniqueItems":true,"items":{"type":"string","enum":["time","address","position","dossier","project","step","operator","organisation","note"]},"description":"lines on the bar, in order: time, address, position, dossier, project, step, operator, organisation, note"},"position":{"type":"string","enum":["bottom","top"],"description":"bottom or top"},"theme":{"type":"string","enum":["dark","light"],"description":"dark bar with light text, or light"},"size":{"type":"string","enum":["small","medium","large"],"description":"small, medium or large"},"name":{"type":"string","maxLength":100,"description":"a name for this layout"}}},"claims":{"type":"array","maxItems":50,"items":{"type":"object","additionalProperties":false,"required":["device","dossier","claimedAt"],"properties":{"device":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"the phone (sha-256 of its key id)"},"member":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"the member that phone belonged to at the time"},"memberName":{"type":"string","maxLength":200,"description":"their name"},"dossier":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"dossier id (ulid)"},"claimedAt":{"type":"string","format":"date-time","description":"picked up on"},"registeredAt":{"type":"string","format":"date-time","description":"registered on"},"stampedAt":{"type":"string","format":"date-time","description":"qualified timestamp of the dossier"},"root":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"root hash of the dossier"}}}},"archivedAt":{"type":"string","format":"date-time","description":"archived on the dashboard: out of view, not deleted"}}},"Project":{"type":"object","additionalProperties":false,"required":["id","organisation","name","createdAt"],"properties":{"id":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"ulid"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"name":{"type":"string","maxLength":200,"minLength":1,"description":"name or address"},"address":{"type":"string","maxLength":200,"description":"address, when the name is not one"},"note":{"type":"string","maxLength":2000,"description":"note"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":50},"description":"labels of the organisation; context to filter and count, never evidence"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"createdBy":{"type":"string","maxLength":200,"description":"who created it, as free text"},"archivedAt":{"type":"string","format":"date-time","description":"archived on the dashboard: out of view, not deleted"},"orders":{"type":"integer","minimum":0},"dossiers":{"type":"integer","minimum":0,"description":"the dossiers, newest first"}},"description":"project id (ulid)"},"Checklist":{"title":"EverStamp sjabloon","type":"object","additionalProperties":false,"required":["name","version","mode","title","subtitle","steps"],"properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"machine name: lower case, digits and dashes; fixed after publishing"},"version":{"type":"integer","minimum":1,"description":"assigned by the API; a version never changes"},"organisation":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","description":"organisation id (ulid); implied by your key"},"createdAt":{"type":"string","format":"date-time","description":"when it was created (ISO 8601)"},"retired":{"type":"boolean","description":"true when retired: still readable for old dossiers, not offered for new ones"},"mode":{"type":"string","enum":["strict","free"],"description":"strict (the app only closes a dossier when every step has its minimum) or free (the steps are a guide)"},"industries":{"type":"array","minItems":1,"maxItems":7,"items":{"type":"string","enum":["construction","automotive","property","claims","logistics","maintenance","general"]},"description":"industries this built-in checklist belongs to"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language, for example {\"en\": \"Handover\", \"nl\": \"Oplevering\"}"},"subtitle":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"subtitle per language"},"steps":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["id","title","required"],"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"step id: lower case, digits and dashes; unique within the checklist"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language"},"required":{"type":"integer","minimum":0,"maximum":99,"description":"minimum number of captures in this step; 0 is optional"},"shots":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,63}$","description":"shot id"},"title":{"type":"object","minProperties":1,"propertyNames":{"pattern":"^[a-z]{2}$"},"additionalProperties":{"type":"string","minLength":1,"maxLength":200},"description":"title per language"}}}}}}}}}}}}