POST/api/auth/sign-up/emailOffen
Creates an account and sends the confirmation e-mail.
- Body
email,password(at least 10 characters),name- Antwortet
- the new user and a session
- Limit
- 5 per hour and IP address
Alle Endpunkte der Core-API. Die Pfade sind relativ zu dieser Seite: Sie leitet /api und /v1 an den Kern weiter, also nutzen Browser-Sitzung und Skript genau dieselben URLs.
Registrieren, Anmelden, Passwort und Profil. Läuft über Better Auth.
/api/auth/sign-up/emailOffenCreates an account and sends the confirmation e-mail.
email, password (at least 10 characters), name/api/auth/sign-in/emailOffenSigns in with an e-mail address.
email, passwordset-auth-token header for callers without cookies/api/auth/sign-in/usernameOffenSigns in with a username instead of an e-mail address.
username, password/api/auth/sign-outMenschEnds the current session.
{ success: true }/api/auth/update-userMenschChanges the profile: display name, username and whether Deeds may show the name.
name, username, defaultVisibility/api/auth/request-password-resetOffenSends a password reset link. Answers the same way whether or not the address exists.
email, redirectTo{ status: true }/api/auth/reset-passwordOffenSets a new password and ends all other sessions of that account.
token from the e-mail link, newPassword{ status: true }/api/auth/verify-emailOffenConfirms an e-mail address from the link in the message.
?token the token from the e-mail link (Pflicht)Alles, was jeder lesen darf: Regeln, Geld, Katalog, Deeds mit Belegen, Statistik, Karte.
/v1/public/rulesOffenThe earning rules that are active right now.
{ rules: [...] } with reward, unit, daily cap, the minimum trust level and audience; invited-only rules add invitedCount (never names)/v1/public/changelogOffenEvery rule version with its reason, plus every budget deposit. Nothing is ever changed in place.
{ ruleVersions: [...], budgetDeposits: [...] }/v1/public/budgetOffenWhere the money behind the Drops is: deposited, not yet issued, in wallets, reserved, donated.
/v1/public/catalogOffenThe redemption catalog by category, with current prices and pool state.
{ categories: [...], providers: [...] }/v1/public/catalog/:slugOffenOne project with its complete price history.
:slug project slug, e.g. ecologi-treepriceHistory/v1/public/deedsOffenAll settled payouts. Contributors who chose anonymity have name: null.
{ deeds: [...] } newest first/v1/public/deeds/:idOffenOne Deed with its proof: the snapshot frozen at payout time, the ledger posting and a fresh check of the receipt hash.
:id payout id (UUID)receiptCheck: matches, differs or missing/v1/public/payouts/:id/receiptOffenThe receipt file of a payout, so anyone can hash it themselves.
:id payout id (UUID)/v1/public/impactOffenThe headline totals: donated and queued Drops, Deeds, contributors.
/v1/public/statsOffenWhat the Deeds financed per project, with CO₂e grouped by period, impact type and how well the figure is backed. Living units are counted from the day they were paid for, so the totals grow on their own.
{ since, deeds, contributors, financed: [...], co2e: { groups, dropsWithoutFactor } }; each group carries accumulated and perYear/v1/public/mapOffenActivity per country for the world map. Never finer than a country.
?days window of 1 to 90 days, 7 by default{ days, countries: [{ country, activities, people }] }/v1/public/footprintOffenThe server's estimated CO₂e and water use as reported by the hosting provider, the website's traffic, and what the Deeds dealt with in the same days. They stand side by side; nothing is offset or subtracted.
?period day, week, month (default) or year: a rolling window ending on the last day the provider has figures for{ period, since, window: { from, to, days, bucket }, server: { co2eGrams, waterLitres, daysWithData }, visits: { bytes, responses, daysWithData, since }, buckets: [{ start, days, co2eGrams, waterLitres, bytes, uptake }], deeds: [{ period, impactType, basis, units, amount, sourceUrls }] }; window and server are null before the first figures arrive, visits before the website reported traffic; uptake is the estimated daily uptake of living units, never subtracted from anythingDeine Daten, Einlösungen, Geräte und dein Recht, alles zu exportieren oder zu löschen.
/v1/meMenschThe signed-in person with their Drops and Sparks balance.
{ user, balances }/v1/me/activitiesMenschYour own reported activities and what they earned.
{ activities: [...] }/v1/me/activitiesMenschReports an activity yourself. Trust level self_reported, so most rules will not pay for it.
source, type, quantity, unit, startedAt, endedAt, optional externalId and zone/v1/me/statsMenschYour own share: what your Drops financed and the CO₂e estimate behind it, counted from the day each Deed was paid.
/v1/public/stats, limited to your redemptions/v1/me/invitationsMenschThe rules you are invited to. Rules with audience invited pay only invited people; being invited also lets you confirm your device's link code.
{ invitations: [{ ruleId, key, title, source, translations, createdAt }] }/v1/me/redemptionsMenschYour redemptions with their status.
{ redemptions: [...] }/v1/me/redemptionsMenschTurns Drops into a queued donation; the Drops are reserved at today's price.
projectId plus quantity (unit projects) or drops (free amount), optional visibility/v1/me/redemptions/:id/cancelMenschTakes a redemption back while it is still queued and returns the Drops.
:id redemption id (UUID)/v1/me/clientsMenschYour connected apps and devices.
{ clients: [...] } without key hashes/v1/me/clientsMenschCreates an API key for an app. The key is shown once and only its hash is stored. Only admins may do this for now (403 clients_owner_only otherwise); a key made by anyone else counts as a third-party app.
name, optional kind (first_party for admins), optional signingPublicKey (Ed25519, base64)apiKey (Status 201)/v1/me/clients/:idMenschRevokes a device: its key stops working immediately.
:id client id (UUID)/v1/me/link/:codeMenschShows which app and device are waiting behind a link code.
:code the code shown on the device, e.g. K7QM-3XRA/v1/me/link/:code/approveMenschApproves a device. It may then report activities for you, nothing else. Only admins may do this for now (403 clients_owner_only).
:code the code shown on the device/v1/me/link/:code/denyMenschRefuses a link request.
:code the code shown on the device/v1/me/exportMenschYour data as one JSON file (GDPR art. 15 and 20). Contains no password hash, token or key hash.
/v1/me/deleteMenschDeletes your account by anonymising it: the ledger and the Deeds stay, everything that points at you goes. Queued redemptions are donated anonymously, the rest of the Drops goes back to the budget.
passwordDie Maschinenseite: Aktivitäten mit API-Schlüssel melden.
/v1/client/activitiesApp oder GerätReports one activity. externalId makes it idempotent, so a retry never pays twice. With an Ed25519 signature in X-Elpia-Signature the activity counts as verified, otherwise as device.
source, type, quantity, unit, startedAt, endedAt, externalId, optional zone, energyWhMeasured, energyWhEstimated/v1/client/meApp oder GerätWhat this key reported and earned (last 24 hours and in total), the latest reward decision and the account's balances. Nothing about other apps.
{ client, last24h, total, lastRewardStatus, balances }, amounts in milli units/v1/client/meApp oder GerätRevokes this key, e.g. when someone logs out on the device. It stops working immediately and cannot be restored.
Wie ein Gerät ohne Browser einen Schlüssel bekommt: Es zeigt einen Code, du bestätigst ihn hier.
/v1/link/startOffenStarts pairing and returns a code the person types into the website.
app, deviceName, optional signingPublicKey{ code, pollToken, expiresIn, interval }; the code is valid for 10 minutes (Status 201)/v1/link/pollOffenAsks whether the person approved. The API key comes back exactly once, on the first approved answer.
pollTokenpending, denied, expired, or approved with apiKeyRegeln, Budget, Katalog, Auszahlungen und die Integritätsprüfung.
/v1/admin/auditInhaberChecks the books: balanced postings, no unexpected negative balances, redemptions matching payouts, receipts matching their hash.
/v1/admin/rulesInhaberAll rule versions, including the disabled ones.
{ versions: [...] }/v1/admin/rulesInhaberCreates a rule with its first version.
key and a version object with reward, unit, caps, minimum trust and a public reason/v1/admin/rules/:id/versionsInhaberAdds a new version of a rule. The old one stays readable; nothing is ever rewritten.
:id rule id (UUID)reason/v1/admin/rules/:id/invitationsInhaberWho is invited to a rule that only pays invited people.
:id rule id (UUID){ invitations: [{ userId, username, email, createdAt }] }/v1/admin/rules/:id/invitationsInhaberInvites a person to a rule. Inviting someone twice changes nothing; an unknown person gives 404 user_not_found.
:id rule id (UUID)user: username or e-mail address/v1/admin/rules/:id/invitations/:userIdInhaberRemoves an invitation. New activities stop earning; rewards already booked stay.
:id rule id (UUID):userId the invited person's id/v1/admin/budget/depositsInhaberPays money into the budget. Drops can only be issued from it.
amountCents, optional memo/v1/admin/catalogInhaberThe catalog including inactive providers and projects.
/v1/admin/categoriesInhaberCreates a category.
slug, name, optional description, translations, sortOrder/v1/admin/categories/:idInhaberChanges a category. Only the fields that are sent change.
:id category id (UUID)/v1/admin/providersInhaberCreates a provider with its minimum payment and fee note.
slug, name, website, optional minPayout, feeNote, translations/v1/admin/providers/:idInhaberChanges a provider.
:id provider id (UUID)/v1/admin/projectsInhaberCreates a project. impactType is required, so no card is ever ambiguous about what the money does.
slug, providerId, categoryId, title, kind, impactType, optional unitName, co2e, translations/v1/admin/projects/:idInhaberChanges a project. kind is fixed because redemptions depend on it.
:id project id (UUID)co2e: null removes the CO₂e figure/v1/admin/projects/:id/pricesInhaberAdds a price. Prices are append-only and queued redemptions keep the price they were made at.
:id project id (UUID)price, currency, fxToEur, public reason/v1/admin/queueInhaberThe pools waiting for a payout and whether they have reached the provider's minimum.
{ pools: [...] }/v1/admin/budget/forecastInhaberWhat paying out today would cost, how much the owner would have to add, and how long the budget lasts at the pace of the last 30 days.
/v1/admin/payoutsInhaberRecords a real payment with its receipt and turns the settled redemptions into a Deed. Payouts cannot be changed afterwards.
projectId, redemptionIds, amountPaid, currency, paidAt, optional comment, and the receipt file/v1/admin/payouts/:id/reviewsInhaberRecords what the provider delivered after the payment. Append-only: a correction never hides the earlier entry.
:id payout id (UUID)status (confirmed, needs_clarification, corrected), note, evidenceUrl (required for confirmed)Was ein Container-Orchestrator fragt, bevor er Verkehr schickt.
/healthOffenChecks the process and its database. Answers 503 when the database is unreachable, so a broken instance is taken out of rotation.
{ status, database }/v1/ops/trafficInternThe website reports how many compressed bytes and responses it sent per UTC day since its last report; the API adds them up. Only totals: no address, cookie or page, so no visit can be told apart.
{ days: [{ day, bytes, responses }] }; days older than 30 days or in the future are skipped{ stored }, the number of days added