Customer
Account-scoped customer API (/v1)
The account this credential belongs to, plus the companies it reaches. restricted is true for a credential confined to particular companies; such a credential reads the account's id, name and status only, because the remaining fields describe the account holder's own corporate identity and billing rather than anything about the companies under it.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/account"{}Owner only. Starts building a zip of everything the account holds: companies, participants, document metadata and payloads, and the audit trail. Returns {export: {id, status}}; poll GET .../export/{exportId} until it carries a download link. Large accounts take a while.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/account/export"{}Owner only. {export: {id, status, downloadUrl?, expiresAt?, error?}}. downloadUrl is present only once status is DONE and within its 24h TTL.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/account/export/string"{}Owner or company admin; an ordinary member is refused. Each key carries permissions: an array of read/send/receive/manage. A company admin sees only the keys confined to its own companies, never the account-wide ones. ?companyId narrows to one company; a key confined to no company reaches the whole account and stays in view whichever company is asked for.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/api-keys"{}Owner or company admin. companyId confines the key to one company; leaving it out produces a key that reaches every company under the account, which only an owner may create. permissions is an array of read/send/receive/manage; omitted or empty means all four. Calling a route the key lacks the permission for is 403 PERMISSION_DENIED. The key itself is in the response and is never shown again.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/api-keys" \ -H "Content-Type: application/json" \ -d '{}'{}Owner or company admin, the latter only for a key confined to one of its own companies. Revoking is immediate and cannot be undone.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/api-keys/string"{}{email}. Always 204, whether or not the address belongs to a user, so that the response cannot be used to discover who has an account.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/auth/forgot" \ -H "Content-Type: application/json" \ -d '{}'{}Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/auth/login" \ -H "Content-Type: application/json" \ -d '{}'{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/auth/logout"{}Signs in with an OIDC token from the account's identity provider. 401 SSO_NOT_LINKED — distinct from the generic UNAUTHORIZED — means the token is valid but no user here is linked to it yet; link the identity after signing in with a password.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/auth/oidc" \ -H "Content-Type: application/json" \ -d '{}'{}Unauthenticated. Returns {publicKey}, the options the browser passes to navigator.credentials.get(), with the challenge and every credential id base64url-encoded. The challenge is single-use and lives five minutes. allowCredentials is empty by design: passkeys here are discoverable, so the authenticator names the account and this route reveals nothing about who has one.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/auth/passkey/challenge" \ -H "Content-Type: application/json" \ -d '{}'{}Unauthenticated: {id, authenticatorData, clientDataJSON, signature, userHandle}, all base64url. Returns the same {token, expiresAt, user} a password login does. Every verification failure is one 401 UNAUTHORIZED, except 401 PASSKEY_CLONE_DETECTED — the authenticator's signature counter went backwards, and the passkey should be removed rather than retried.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/auth/passkey/login" \ -H "Content-Type: application/json" \ -d '{}'{}{token, password}. A token that is unknown, expired, already used, or whose user can no longer sign in is 400 RESET_TOKEN_INVALID — its own code, so a client can offer a fresh link without reading the message.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/auth/reset" \ -H "Content-Type: application/json" \ -d '{}'{}Creates an account (the contract party), its first company (the account's own legal entity unless a company object says otherwise) and the first owner: {account:{name?,legalName,countryCode,registrationNumber?,vatNumber?}, company?:{name?,identifier?,countryCode?,registrationNumber?,vatNumber?}, owner:{name?,email,password}, bootstrapToken?}.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/auth/signup" \ -H "Content-Type: application/json" \ -d '{}'{}?q matches name, identifier, id, registration number and VAT number, case-insensitively. Without ?limit or ?cursor the whole matching list comes back at once; pass either and cursor pagination applies, with nextCursor set while more remains.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Query Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/companies"{}Owner only. Adds a legal entity under the account; participants under it still need operator approval. Empty countryCode inherits the account's; an omitted identifier is derived from the name.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/companies" \ -H "Content-Type: application/json" \ -d '{}'{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/companies/string"{}Owner only. name, identifier (409 IDENTIFIER_TAKEN on collision), countryCode, registrationNumber, vatNumber.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/v1/companies/string" \ -H "Content-Type: application/json" \ -d '{}'{}Unauthenticated: a single-use handoff token is itself the credential. A reused or expired token is 401 UNAUTHORIZED.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/desk-sessions/exchange" \ -H "Content-Type: application/json" \ -d '{}'{}The signed-in user. session reports {authMethod: "password"|"sso", issuer, provider}, describing how they signed in; it is absent for an API key. Reachable even while user.mustChangePassword is true, when every other route is refused — so a client can tell why it is being refused.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/me"{}Documents belonging to the companies this credential reaches; ?companyId narrows to one. ?q matches the sender and receiver participant from the start of the value, case-sensitively, or the document id exactly — never a substring in the middle. ?counts=true without an explicit ?from covers the last 30 days rather than the account's whole history.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Query Parameters
When true, the response gets a counts field breaking the active filter down by status/reason/eventType (docs/console-lists.md §5 A1). limit=0 skips the rows and returns only counts.
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/messages"{}202 with status QUEUED_VALIDATION is the usual answer: the document is checked against the Peppol rules after this request returns, not inside it, so the verdict arrives on a webhook or a later GET rather than here. A document type with no rules to check, sent under a capability that allows unvalidated documents, skips that step and is 201 with status QUEUED. A replayed Idempotency-Key is 200 with the current status.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/messages" \ -H "Content-Type: application/json" \ -d '{}'{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/messages/uploads" \ -H "Content-Type: application/json" \ -d '{}'{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/messages/string"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/messages/string/ack"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/messages/string/payload"{}{companyId?, ids: ["scheme:value", ...]}, at most 100 ids (400 VALIDATION_FAILED naming the cap above that, or on an empty list). Looked up concurrently, capped at discovery.Parallel (8) against SMP. Returns {results: [{id, status: OK|INVALID|ERROR, canonicalId?, exists?, smpUrl?, capabilities?, error?}]}, one entry per id in the same order, even when some ids fail: INVALID is a malformed id (no SMP call made), ERROR is a failed SMP call, and OK carries exists (false is a normal, common answer, not an error).
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/network/participants/lookup" \ -H "Content-Type: application/json" \ -d '{}'{}?q is either a full Peppol id, looked up exactly (response mode "id"), or free text tried as a national registration number against every scheme we know a format rule for and, where the Peppol Directory is available, as a name or number query against it (mode "search"). Search results are confirmed hits only: a candidate that does not parse, is not registered, or returns no Directory match all give zero rows rather than a not-found entry — unlike "id" mode, whose exists:false is definitive, a search miss only means this route did not find them. directoryConfigured says whether the Directory was consulted, so an empty result can be explained as "they may simply never have published a business card".
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/network/participants/search"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/network/participants/string"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/network/participants/string/capabilities"{}Every participant under the companies the principal reaches; ?companyId narrows to one of them. ?status and ?q (scheme:value, canonicalId, name, identifier) filter in memory like the admin list. ?counts=true adds a status breakdown for the account (scoped by companyId when given).
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Query Parameters
When true, the response gets a counts field breaking the active filter down by status/reason/eventType (docs/console-lists.md §5 A1). limit=0 skips the rows and returns only counts.
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/participants"{}Optional capabilities: an array of {documentTypeId, processId, direction, allowUnvalidated}, the same element shape as POST /v1/participants/{id}/capabilities. Created in the same transaction as the participant. Omitted = no capabilities, matching pre-existing behaviour.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/participants" \ -H "Content-Type: application/json" \ -d '{}'{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/participants/string"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/v1/participants/string" \ -H "Content-Type: application/json" \ -d '{}'{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/participants/string"{}Filter with ?eventType, ?q (substring over actor and metadata), ?from/?to. Each row carries actorName and, where the event has one, targetType/targetId/targetName/targetSub (A8) — no targetHref, since this surface has no admin pages to link a company/account/login target to.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Query Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/participants/string/audit"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/participants/string/capabilities"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/participants/string/capabilities" \ -H "Content-Type: application/json" \ -d '{}'{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/participants/string/capabilities/string"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/participants/string/migration" \ -H "Content-Type: application/json" \ -d '{}'{}{passkeys:[{id, name, aaguid, transports, createdAt, lastUsedAt}]} for the signed-in user. An API key has no passkeys and gets 403: a passkey belongs to a person, not to an account.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/passkeys"{}{name, id, attestationObject, clientDataJSON, transports}, the binary members base64url. The challenge must be one issued to this same user, and must not have been used already.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/passkeys" \ -H "Content-Type: application/json" \ -d '{}'{}Returns {publicKey}: PublicKeyCredentialCreationOptions for the signed-in user, with their existing credentials in excludeCredentials so one authenticator cannot hold two passkeys for the same account.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/passkeys/challenge"{}Removing the last one is allowed and needs no confirmation: every user always has a password, so a passkey is an alternative sign-in method rather than the only one.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/passkeys/string"{}SFTP connection details (host, port, host key fingerprint, per-login root and layout, file settings)
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/sftp/connection"{}A credential confined to particular companies sees only the logins belonging to them; a login with no company reaches the whole account and is visible only to credentials that do too. ?companyId narrows to one company; an account-wide login stays in view whichever company is asked for.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/sftp/logins"{}{resetPassword: true} and nothing else: the new password is in the response, once. Changing the authentication method, disabling a login, setting a password directly or moving it between companies is 400 OPERATOR_MANAGED — ask us instead. Owner or company admin, the latter only for a login belonging to one of its own companies.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/v1/sftp/logins/string" \ -H "Content-Type: application/json" \ -d '{}'{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/sso/identities"{}Session principal or API key. For a session, the token's email must match the caller's own account email or the request is refused with 400 SSO_EMAIL_MISMATCH — an API key has no user to match against and keeps the unrestricted automation path.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/sso/identities" \ -H "Content-Type: application/json" \ -d '{}'{}An owner may remove any identity in the account; any other signed-in user only one whose email is their own (403 FORBIDDEN otherwise); an API key keeps the account-wide automation path.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/sso/identities/string"{}Unauthenticated: {configured, provider, issuer, passkeysEnabled}, so a sign-in page can show or hide the single sign-on button, and label it with the right provider name, before anyone has signed in.
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/sso/status"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/stream"{}Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/stream-tickets"{}Metered events for the caller's account in [from, to) (default: the last 24 hours): totals per kind and the same per company, for re-billing. ?companyId narrows to one company the principal reaches; format=csv exports accountId,companyId,kind,count.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/usage"{}Owner or company admin. An owner sees every user under the account; a company admin sees only the users whose companies lie entirely inside its own, plus itself. ?companyId narrows to the users who reach that company; a user with no confinement reaches every company and stays in view. Every user carries status ("active" | "inactive"); a deactivated one also carries disabledAt, and erasableAt once it can be erased. Only active users are listed unless ?include=inactive; any other value is 400 VALIDATION_FAILED.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/users"{}Owner or company admin. role is one of owner, company_admin, member. companyIds confines the user to those companies; from an owner, empty means every company, an owner can never be confined, and a company admin must name at least one. A company admin may create only a member or another company admin, only within its own companies, and an omitted companyIds then means its own companies rather than the whole account. Leave password out: a random one is generated, the user is flagged mustChangePassword, and a one-time set-password link is emailed. If mail is not available, temporaryPassword comes back once instead, for you to hand over another way.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/users" \ -H "Content-Type: application/json" \ -d '{}'{}Changing your own password requires currentPassword: wrong is 400 CURRENT_PASSWORD_INVALID, missing is 400 CURRENT_PASSWORD_REQUIRED. It is not required when an owner resets somebody else's. Setting your own password while signed in through single sign-on is refused with 403 PASSWORD_CHANGE_NOT_ALLOWED_FOR_SSO_SESSION. On your own id this is one of the two routes still reachable while mustChangePassword is true, and setting a real password clears the flag without a fresh sign-in. role and companyIds need an owner, or a company admin acting on someone else — never on your own row, so nobody widens their own access. companyIds replaces the user's confinement; omitted leaves it alone, and from an owner, empty means every company. Promoting someone to owner always clears it. A change takes effect on the user's next request. resendInvite is the sibling of resetPassword for a user who never set a password: it mails a 48-hour invitation link rather than the one-hour reset link.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/v1/users/string" \ -H "Content-Type: application/json" \ -d '{}'{}Owner or company admin, the latter only for a user inside its own companies. The first call deactivates: sign-in is refused, sessions and passkeys are deleted, and status becomes "inactive". The last active owner cannot be deactivated (409 LAST_OWNER), nor can you deactivate yourself (400 VALIDATION_FAILED). After the user has stayed deactivated for the grace period — 30 days — a second call erases them permanently instead; 409 USER_NOT_DISABLED, ERASURE_TOO_SOON and ERASURE_NOT_CONFIGURED name the cases where it will not. POST /v1/users/{id}/enable reverses a deactivation.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/users/string"{}Owner or company admin, the latter only for a user inside its own companies. The user signs in again with the password they already had and keeps the companies they had; deactivation never touched either. Passkeys do not come back — deactivation deleted them — so a new one has to be registered. API keys are unaffected either way: a key belongs to the account, not to whoever created it, and is revoked on its own. Reactivating an already-active user is not an error.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/users/string/enable"{}A credential confined to particular companies sees only the endpoints belonging to them. An endpoint with no company receives events for the whole account and is visible only to credentials that reach it. ?companyId narrows to one company; an account-wide endpoint stays in view whichever company is asked for.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/webhooks"{}Owner or company admin. companyId confines the endpoint to one company's documents; leaving it out sends every company under the account to it, which only an owner may create. Payloads carry accountId and companyId, so one endpoint can serve many companies.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/webhooks" \ -H "Content-Type: application/json" \ -d '{}'{}Deliveries for the principal's account (companyFilter applies). Filter with ?status, ?companyId, ?from, ?to; page with ?cursor and ?limit. Returns {deliveries, nextCursor?}.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Query Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/webhooks/deliveries"{}Owner or company admin, the latter only for an endpoint belonging to one of its own companies. rotateSecret issues a new signing secret and returns it once — deliveries signed with the old one are already gone, so update your verifier at the same time.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/v1/webhooks/string" \ -H "Content-Type: application/json" \ -d '{}'{}Owner or company admin, with the same rule about which endpoints it reaches as PATCH.
Authorization
customerAuth Customer session (pus_) or API key (pap_). X-API-Key is also accepted.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/webhooks/string"{}