# Kintra ## Docs - [Get an analytics summary](https://docs.kintra.io/api-reference/gateway/analytics/get-an-analytics-summary.md): Returns the tenant-wide counts behind a dashboard header: `total_customers`, `total_redemptions`, `total_rewards`, `total_tiers` and `total_internal_transactions`. Call it when you want the figures in one request rather than paging each collection for its `total_count`. Returns 404 when the tenant b… - [Get an internal transaction timeline](https://docs.kintra.io/api-reference/gateway/analytics/get-an-internal-transaction-timeline.md): Returns internal transaction activity over time, bucketed by the `mode` query parameter, which takes `1d`, `1w`, `1m`, `3m`, `1y` or `all`. The response `data` echoes the `mode` applied and carries a `data` array of points to chart. Call it for an activity graph rather than paging the transaction li… - [List top clubs by membership](https://docs.kintra.io/api-reference/gateway/analytics/list-top-clubs-by-membership.md): Ranks your clubs by how many active customers belong to them. The response `data` carries `items` alongside `tenant_id` and `total_active_tenant_customers`, so each row can be read as a share of the whole base. Call it to see where your customers concentrate. Returns 404 when the tenant behind the A… - [List top countries by customer count](https://docs.kintra.io/api-reference/gateway/analytics/list-top-countries-by-customer-count.md): Ranks countries by how many of your active customers are in them, using the country set through the customer country route. The response `data` carries `items` alongside `tenant_id` and `total_active_tenant_customers`. A customer with no country set counts toward the total but ranks under no country… - [List top rewards by redemptions](https://docs.kintra.io/api-reference/gateway/analytics/list-top-rewards-by-redemptions.md): Ranks your rewards by how often they have been redeemed. The response `data` carries `items` alongside `tenant_id` and `total_redemptions`. Call it to see which rewards customers actually take, before changing an `xp_cost` or retiring a reward. Returns 404 when the tenant behind the API key cannot b… - [Add a customer to a club](https://docs.kintra.io/api-reference/gateway/customers/add-a-customer-to-a-club.md): Adds the customer to the club named by `club_id`. Call it when a customer joins a segment you track; the top clubs analytics route reports on the same membership. The response `data` carries `success`. A `club_id` that names no club under your tenant returns 400, and an unknown customer returns 404.… - [Check customer tier eligibility](https://docs.kintra.io/api-reference/gateway/customers/check-customer-tier-eligibility.md): Reports whether one customer currently meets one tier rule. The response `data` carries `eligible`, a boolean, and nothing else: it is a check, not a promotion, and it changes no state. Call it before showing a customer a tier benefit. Returns 404 when the tier is not found under your tenant. - [Create a customer](https://docs.kintra.io/api-reference/gateway/customers/create-a-customer.md): Registers a customer under your tenant. `email`, `first_name`, `last_name` and `date_of_birth` are all required, where `date_of_birth` is a calendar date written `YYYY-MM-DD` and is checked for that format and nothing else. A body that fails any of the four is refused with 422 `VALIDATION_INVALID_IN… - [Get a customer](https://docs.kintra.io/api-reference/gateway/customers/get-a-customer.md): Returns one customer by id, as a `user` record with the `tenant` it belongs to. Call it after a create, or whenever you need the current profile behind a customer id you already hold. `customer_id` is the path parameter. Returns 404 when no customer with that id belongs to your tenant. - [Get a customer XP balance](https://docs.kintra.io/api-reference/gateway/customers/get-a-customer-xp-balance.md): Returns one customer's current XP balance as `data.balance`. The value comes back as a string, so parse it as an integer rather than as a JSON number. Call it before offering a redemption, or to show a customer what they have. Returns 404 when the customer is not found under your tenant. - [List customer asset balances](https://docs.kintra.io/api-reference/gateway/customers/list-customer-asset-balances.md): Lists one customer's balances, one row per onchain asset they hold. Call it to show a customer what they are holding, or to check an asset balance before acting on it. Filter with `onchain_asset_id`, `onchain_asset_name` and `onchain_asset_symbol`, and page with `page` and `limit`. The response `dat… - [List customer transactions](https://docs.kintra.io/api-reference/gateway/customers/list-customer-transactions.md): Lists the internal transactions recorded against one customer, which is the per-customer view of the same ledger the tenant-wide list returns. Call it to show a customer their own history. Filter with `type`, `status`, `created_from` and `created_to`, and page with `page` and `limit`. The response `… - [List customers](https://docs.kintra.io/api-reference/gateway/customers/list-customers.md): Lists the customers registered under your tenant. Call it to page through your customer base, or to check whether an email address is already registered before creating a record. Filter with `email`, `xp_status` and `eligible_tier_id`, and page with `page` and `limit`. The response `data` carries `i… - [Lock or unlock a customer XP balance](https://docs.kintra.io/api-reference/gateway/customers/lock-or-unlock-a-customer-xp-balance.md): Sets a customer's XP balance status to `locked` or back to `active`. Call it to mark a balance while you look into a customer, and again to release it. The `xp_status` filter on the customer list reports the same state. The response `data` carries `success`. Returns 404 when the customer is not foun… - [Remove a customer from a club](https://docs.kintra.io/api-reference/gateway/customers/remove-a-customer-from-a-club.md): Removes the club membership named by `club_id` from the customer. Call it when a customer leaves a segment you track. The response `data` carries `success`. Returns 404 when the customer or the membership does not exist under your tenant. - [Set a customer country](https://docs.kintra.io/api-reference/gateway/customers/set-a-customer-country.md): Sets the customer's country to `country_id`, or clears the assignment when `country_id` is `null`. Country is what the top countries analytics route groups on, so set it when you learn or correct where a customer is based. The response `data` carries `success`. A `country_id` that names no country r… - [Update a customer status](https://docs.kintra.io/api-reference/gateway/customers/update-a-customer-status.md): Sets a customer's account `status` to `pending`, `active`, `suspended` or `reinstated`. Call it to suspend a customer and again to reinstate them. The response `data` carries `success`. Returns 404 when the customer id does not belong to your tenant. `X-Idempotency-Key` is required: a missing key re… - [Get an internal transaction](https://docs.kintra.io/api-reference/gateway/internal-transactions/get-an-internal-transaction.md): Returns one internal transaction by id with its `type`, `amount`, `status`, `notes`, `metadata` and `user_id`, plus the linked `onchain_asset`, `reward` and `blockchain_transaction_links`. Call it to follow a single movement through to the onchain record behind it. Returns 404 when no transaction wi… - [List internal transactions](https://docs.kintra.io/api-reference/gateway/internal-transactions/list-internal-transactions.md): Lists every internal transaction recorded for your tenant, which is the route to reconcile your own ledger against this one. Filter with `user_id`, `reward_id`, `redemption_id`, `onchain_asset_id`, `type`, `status`, `blockchain_transaction_id`, `transaction_hash`, `chain_id`, `created_from` and `cre… - [List onchain assets](https://docs.kintra.io/api-reference/gateway/onchain-assets/list-onchain-assets.md): Lists the onchain assets available to your tenant, which are the assets rewards pay out in and balances are held in. Call it to resolve an `onchain_asset_id` you need for a filter elsewhere. Filter with `chain_id`, `key`, `name`, `symbol`, `asset_address`, `type` and `status`, and page with `page` a… - [Get a redemption](https://docs.kintra.io/api-reference/gateway/redemptions/get-a-redemption.md): Returns one redemption by id with its `status`, `xp_spent`, `user_id` and `tenant_id`, plus the linked `reward`. Call it to confirm what a redemption you started with the redeem route resulted in, or while fulfilling one. Returns 404 when no redemption with that id belongs to your tenant. - [List redemptions](https://docs.kintra.io/api-reference/gateway/redemptions/list-redemptions.md): Lists the redemptions your customers have raised. Call it to pick up redemptions waiting on you to fulfil them, or to audit what has been claimed. Filter with `user_id`, `reward_id`, `status`, `created_from` and `created_to`, and page with `page` and `limit`. The response `data` carries `items` alon… - [Create a reward](https://docs.kintra.io/api-reference/gateway/rewards/create-a-reward.md): Creates a reward that customers can redeem with XP. `title` and `xp_cost` are required; `description`, `metadata`, `min_tier_id` and a `status` of `initialized` or `published` are optional. A reward left at `initialized` can still be deleted, so the usual order is to create it, check it, then move i… - [Delete a reward](https://docs.kintra.io/api-reference/gateway/rewards/delete-a-reward.md): Deletes a reward. Only a reward that has not been published can be deleted: a published one returns 400, and the way to retire it instead is to set `is_active` to false with the update route. The response `data` carries `success`. Returns 404 when no reward with that id belongs to your tenant. - [Get a reward](https://docs.kintra.io/api-reference/gateway/rewards/get-a-reward.md): Returns one reward by id with `title`, `description`, `xp_cost`, `is_active`, `status`, `min_tier_id`, `metadata` and the `onchain_asset_id` it is denominated in. Call it to render a reward detail view, or to read the current `xp_cost` before offering a redemption. Returns 404 when no reward with th… - [List rewards](https://docs.kintra.io/api-reference/gateway/rewards/list-rewards.md): Lists your rewards, published and unpublished alike. Call it to render a catalogue for customers, filtering on `status` and `is_active` so only live rewards reach them. Filter with `search`, `xp_cost_from`, `xp_cost_to`, `is_active` and `status`, and page with `page` and `limit`. The response `data`… - [Update a reward](https://docs.kintra.io/api-reference/gateway/rewards/update-a-reward.md): Updates a reward in place. Every field is optional: send `title`, `description`, `xp_cost`, `is_active`, `metadata`, `min_tier_id` or `status`, and leave out what you are not changing. This is the route that moves a reward from `initialized` to `published`, and the route that flips `is_active`. Publ… - [Create a tier rule](https://docs.kintra.io/api-reference/gateway/tiers/create-a-tier-rule.md): Creates a tier rule. `tier_name` and `min_xp_threshold` are required; `benefits_description`, `color` and `icon` are optional presentation fields. `min_xp_threshold` is the XP a customer needs before the eligibility route reports them eligible for the tier. The response `data` carries the created ru… - [Delete a tier rule](https://docs.kintra.io/api-reference/gateway/tiers/delete-a-tier-rule.md): Deletes a tier rule by id. Call it for a tier you no longer offer, after checking that no reward still points at it through `min_tier_id`. The response `data` carries `success`. Returns 404 when no tier rule with that id belongs to your tenant. - [Get a tier rule](https://docs.kintra.io/api-reference/gateway/tiers/get-a-tier-rule.md): Returns one tier rule by id with `tier_name`, `min_xp_threshold`, `benefits_description`, `color` and `icon`. Call it to render a tier, or to read the current threshold before changing it. `min_xp_threshold` comes back as a string. Returns 404 when no tier rule with that id belongs to your tenant. - [List tier rules](https://docs.kintra.io/api-reference/gateway/tiers/list-tier-rules.md): Lists the tier rules that define your XP tiers. Call it to render a tier ladder, or to find the tier id an eligibility check needs. Filter with `tier_name`, `min_xp_threshold_from` and `min_xp_threshold_to`, and page with `page` and `limit`. The response `data` carries `items` alongside `total_count… - [Update a tier rule](https://docs.kintra.io/api-reference/gateway/tiers/update-a-tier-rule.md): Replaces a tier rule. `tier_name` and `min_xp_threshold` are both required on the request, so send the current value for whichever one you are not changing. Moving `min_xp_threshold` changes which customers the eligibility route reports as eligible. The response `data` carries `success`. Returns 404… - [Award XP to a customer](https://docs.kintra.io/api-reference/gateway/xp/award-xp-to-a-customer.md): Credits `amount` XP to the customer named by `user_id`, with optional `notes` recorded against the entry. Call it when a customer completes something you reward, which for most integrations is the write this surface exists for. The response `data` carries the `transaction` the credit created, which… - [Redeem a reward for a customer](https://docs.kintra.io/api-reference/gateway/xp/redeem-a-reward-for-a-customer.md): Spends a customer's XP on a reward. `user_id` and `reward_id` are required, `notes` is optional. Call it when a customer claims a reward you have published. The response `data` carries the `transaction` recorded for the spend, and the redemption it creates is readable through the redemption routes.… - [Introduction](https://docs.kintra.io/api-reference/overview.md): Which Kintra API surface to call, what credential it takes, and how to read the reference. - [Get the signed-in account](https://docs.kintra.io/api-reference/portal/account/get-the-signed-in-account.md): Returns the account behind the current session with its `id`, `username`, `email`, `status` and `onboarding_status`, the tenants it belongs to under `tenant_users`, and the roles it holds. Returns 401 when the session is not valid. - [Get an analytics summary](https://docs.kintra.io/api-reference/portal/analytics/get-an-analytics-summary.md): Returns the tenant-wide dashboard counts through the Portal API. - [Get an internal transaction timeline](https://docs.kintra.io/api-reference/portal/analytics/get-an-internal-transaction-timeline.md): Charts internal transaction volume over time through the Portal API. - [List top clubs by membership](https://docs.kintra.io/api-reference/portal/analytics/list-top-clubs-by-membership.md): Ranks clubs by active membership through the Portal API. - [List top countries by customer count](https://docs.kintra.io/api-reference/portal/analytics/list-top-countries-by-customer-count.md): Ranks countries by active customers through the Portal API. - [List top rewards by redemptions](https://docs.kintra.io/api-reference/portal/analytics/list-top-rewards-by-redemptions.md): Ranks rewards by redemption count through the Portal API. - [Create an API key](https://docs.kintra.io/api-reference/portal/api-keys/create-an-api-key.md): Creates the credential a Gateway API integration signs its requests with. `name` is required and has to be unique among your active keys; `label` and `expires_at` are optional, where `expires_at` takes an ISO date or date-time in the future and a date-only value is read as end of day. Omit it for a… - [List API keys](https://docs.kintra.io/api-reference/portal/api-keys/list-api-keys.md): Lists the API keys issued for your tenant, one row per key carrying `key_id`, `name`, `label`, `status`, `secret_prefix`, `secret_suffix`, `expires_at`, `last_used_at` and `created_at`. The secret itself is never returned here: only the create response carries it, so a key whose secret was not store… - [Revoke an API key](https://docs.kintra.io/api-reference/portal/api-keys/revoke-an-api-key.md): Revokes one API key, named by its `id` rather than by the `key_id` you send in `X-Tenant-Key`. Its `status` becomes `revoked` and gateway requests signed with it stop authenticating; revoking cannot be undone, so a key you still need is replaced rather than restored. Create the replacement first and… - [Create an attribute definition](https://docs.kintra.io/api-reference/portal/attributes/create-an-attribute-definition.md): Defines a custom attribute you can then set on customers. The body takes `key` and `type`. The response `data` carries the new `id`, and a `warning` when the request is accepted with a caveat. A `key` already defined under your tenant returns 409, and a `type` the API does not support returns 422. - [Delete an attribute definition](https://docs.kintra.io/api-reference/portal/attributes/delete-an-attribute-definition.md): Deletes an attribute definition. The response `data` carries `affected_cohort_ids`, the cohorts whose rules named it, so you can review them before they start selecting a different set. Returns 404 when no definition with that id belongs to your tenant. - [List attribute definitions](https://docs.kintra.io/api-reference/portal/attributes/list-attribute-definitions.md): Lists the attribute definitions under your tenant, each with its `key`, `type`, `is_system` flag, `description` and `deleted_at`. Set `include_deleted` to include definitions that have been deleted. - [Rename an attribute definition](https://docs.kintra.io/api-reference/portal/attributes/rename-an-attribute-definition.md): Changes the `key` of an attribute definition, leaving the values already recorded against it in place. The response `data` carries `success`. A `key` already in use returns 409, and an unknown definition returns 404. - [Restore a deleted attribute definition](https://docs.kintra.io/api-reference/portal/attributes/restore-a-deleted-attribute-definition.md): Brings back an attribute definition that was deleted, together with the values recorded against it. The response `data` carries `success`. Returns 404 when no deleted definition with that id belongs to your tenant, and 409 when a live definition already holds the same `key`. - [Create a cohort](https://docs.kintra.io/api-reference/portal/cohorts/create-a-cohort.md): Creates a cohort, a saved rule that selects customers by their attribute values. `name` and `rules` are required and `description` is optional. The response `data` carries the new `id`. A `name` already in use returns 409, and a rule document the API cannot read returns 422. - [Delete a cohort](https://docs.kintra.io/api-reference/portal/cohorts/delete-a-cohort.md): Deletes a cohort. Only the saved rule goes; the customers it selected keep their attribute values and their other memberships. The response `data` carries `success`. Returns 404 when no cohort with that id belongs to your tenant. - [Get a cohort](https://docs.kintra.io/api-reference/portal/cohorts/get-a-cohort.md): Returns one cohort with its `name`, `description`, `rules`, current `member_count` and `dead_keys`, the attribute keys its rules name that no longer exist. Returns 404 when no cohort with that id belongs to your tenant. - [List cohort members](https://docs.kintra.io/api-reference/portal/cohorts/list-cohort-members.md): Lists the customers a cohort selects as of this request, paged with `page` and `limit`. The response `data` carries `items` alongside `total_count`, `page`, `limit`, `total_pages` and `has_next_page`. - [List cohorts](https://docs.kintra.io/api-reference/portal/cohorts/list-cohorts.md): Lists the cohorts defined under your tenant, paged with `page` and `limit`. The response `data` carries `items` alongside `total_count`, `page`, `limit`, `total_pages` and `has_next_page`. - [Preview a cohort rule](https://docs.kintra.io/api-reference/portal/cohorts/preview-a-cohort-rule.md): Runs a `rules` document without saving it and reports what it would select, which is how you check a rule before creating or updating a cohort. The response `data` carries `count` and a `sample` of matching customers. A rule document the API cannot read returns 422. - [Update a cohort](https://docs.kintra.io/api-reference/portal/cohorts/update-a-cohort.md): Updates a cohort in place. Every field is optional: send `name`, `description` or `rules` and leave out what you are not changing. Changing `rules` changes which customers the cohort selects from the next read on. The response `data` carries `success`. A `name` already in use returns 409. - [List attribute values for a customer](https://docs.kintra.io/api-reference/portal/customer-attributes/list-attribute-values-for-a-customer.md): Returns the attribute values held against one customer. The response `data` is an array of entries carrying `definition_id`, `key`, `type` and `value`, where `value` is `null` for an attribute the customer has no value for. Returns 404 when the customer does not belong to your tenant. - [Set attribute values for a customer](https://docs.kintra.io/api-reference/portal/customer-attributes/set-attribute-values-for-a-customer.md): Sets attribute values on one customer. The body takes `values`, keyed by attribute definition id, which is `definition_id` on the customer's attribute list and `id` on the attribute definition list, and a `null` clears that value. Definitions you leave out are untouched. The response `data` carries… - [Add a customer to a club](https://docs.kintra.io/api-reference/portal/customers/add-a-customer-to-a-club.md): Adds a customer to a club through the Portal API. - [Check customer tier eligibility](https://docs.kintra.io/api-reference/portal/customers/check-customer-tier-eligibility.md): Checks one customer against one tier rule through the Portal API. - [Create a customer](https://docs.kintra.io/api-reference/portal/customers/create-a-customer.md): Creates a customer record under your tenant through the Portal API. - [Get a customer](https://docs.kintra.io/api-reference/portal/customers/get-a-customer.md): Reads one customer record through the Portal API. - [Get a customer XP balance](https://docs.kintra.io/api-reference/portal/customers/get-a-customer-xp-balance.md): Reads one customer's XP balance through the Portal API. - [List customer asset balances](https://docs.kintra.io/api-reference/portal/customers/list-customer-asset-balances.md): Reads one customer's onchain asset balances through the Portal API. - [List customer transactions](https://docs.kintra.io/api-reference/portal/customers/list-customer-transactions.md): Pages one customer's internal transactions through the Portal API. - [List customers](https://docs.kintra.io/api-reference/portal/customers/list-customers.md): Pages the customers under your tenant through the Portal API. - [Lock or unlock a customer XP balance](https://docs.kintra.io/api-reference/portal/customers/lock-or-unlock-a-customer-xp-balance.md): Locks or unlocks one customer's XP balance through the Portal API. - [Remove a customer from a club](https://docs.kintra.io/api-reference/portal/customers/remove-a-customer-from-a-club.md): Removes a club membership from a customer through the Portal API. - [Set a customer country](https://docs.kintra.io/api-reference/portal/customers/set-a-customer-country.md): Sets or clears a customer's country through the Portal API. - [Update a customer status](https://docs.kintra.io/api-reference/portal/customers/update-a-customer-status.md): Changes a customer's account status through the Portal API. - [Get an internal transaction](https://docs.kintra.io/api-reference/portal/internal-transactions/get-an-internal-transaction.md): Reads one internal transaction through the Portal API. - [List internal transactions](https://docs.kintra.io/api-reference/portal/internal-transactions/list-internal-transactions.md): Pages every internal transaction for your tenant through the Portal API. - [Add a member](https://docs.kintra.io/api-reference/portal/members/add-a-member.md): Gives a person access to the Kintra CMS for your tenant. `email` and `role` are both required. A `role` of `super_admin` can manage everything under the tenant, members and API keys included; `read_only` can read members, API keys and the analytics summary and change nothing. An address that already… - [List members](https://docs.kintra.io/api-reference/portal/members/list-members.md): Lists the people who can sign in to the Kintra CMS for your tenant, one row per membership carrying `id`, `user_id`, `email`, `username`, `status`, `roles`, `created_at` and `updated_at`. Each entry in `roles` carries a `role_id`. Filter with `email`, which matches part of an address without regard… - [Remove a member](https://docs.kintra.io/api-reference/portal/members/remove-a-member.md): Takes a person's access to the Kintra CMS away, named by their `user_id` rather than by the `id` of the membership the list returns. A remove that lands returns 200 with the envelope's own `success` and no `data`, and they stop appearing in the member list. Two removes are refused with 400: your own… - [List onchain assets](https://docs.kintra.io/api-reference/portal/onchain-assets/list-onchain-assets.md): Pages your onchain assets through the Portal API. - [Get a redemption](https://docs.kintra.io/api-reference/portal/redemptions/get-a-redemption.md): Reads one redemption through the Portal API. - [List redemptions](https://docs.kintra.io/api-reference/portal/redemptions/list-redemptions.md): Pages the redemptions raised by your customers through the Portal API. - [Get reference data](https://docs.kintra.io/api-reference/portal/reference-data/get-reference-data.md): Returns the reference data the other routes take ids from: `clubs` and `countries`. Read it once and cache it rather than resolving an id per request. - [Create a reward](https://docs.kintra.io/api-reference/portal/rewards/create-a-reward.md): Creates a redeemable reward through the Portal API. - [Create a reward image upload URL](https://docs.kintra.io/api-reference/portal/rewards/create-a-reward-image-upload-url.md): Mints a single-use URL for uploading a reward image. The body takes `contentType`, which accepts `image/jpeg`, `image/png` and `image/webp`, and `fileSize` in bytes, which has an upper bound. The response `data` carries `uploadUrl` to PUT the file to and `imageKey` to record on the reward. A content… - [Delete a reward](https://docs.kintra.io/api-reference/portal/rewards/delete-a-reward.md): Deletes an unpublished reward through the Portal API. - [Get a reward](https://docs.kintra.io/api-reference/portal/rewards/get-a-reward.md): Reads one reward through the Portal API. - [List rewards](https://docs.kintra.io/api-reference/portal/rewards/list-rewards.md): Pages your rewards through the Portal API. - [Update a reward](https://docs.kintra.io/api-reference/portal/rewards/update-a-reward.md): Revises a reward in place through the Portal API. - [Get service information](https://docs.kintra.io/api-reference/portal/service/get-service-information.md): Returns the service `name`, a short `description`, a `documentation` link and the API `versions` this deployment serves. It takes no credentials, so it also answers as a liveness check. - [Create a tier rule](https://docs.kintra.io/api-reference/portal/tiers/create-a-tier-rule.md): Creates a tier rule through the Portal API. - [Delete a tier rule](https://docs.kintra.io/api-reference/portal/tiers/delete-a-tier-rule.md): Deletes a tier rule through the Portal API. - [Get a tier member count](https://docs.kintra.io/api-reference/portal/tiers/get-a-tier-member-count.md): Returns `member_count`, how many customers currently qualify for this tier as the highest tier they reach. Read it before deleting a tier to see how many customers would move. Returns 404 when no tier with that id belongs to your tenant. - [Get a tier rule](https://docs.kintra.io/api-reference/portal/tiers/get-a-tier-rule.md): Reads one tier rule through the Portal API. - [List tier rules](https://docs.kintra.io/api-reference/portal/tiers/list-tier-rules.md): Pages the tier rules through the Portal API. - [Update a tier rule](https://docs.kintra.io/api-reference/portal/tiers/update-a-tier-rule.md): Replaces a tier rule through the Portal API. - [Award XP to a customer](https://docs.kintra.io/api-reference/portal/xp/award-xp-to-a-customer.md): Credits XP to a customer through the Portal API. - [Redeem a reward for a customer](https://docs.kintra.io/api-reference/portal/xp/redeem-a-reward-for-a-customer.md): Redeems a reward for a customer through the Portal API. - [Architecture](https://docs.kintra.io/architecture.md): How a tenant's data is kept apart, where an XP balance comes from, what a caller observes while an earn settles, and what the XP token on chain does. - [Authentication](https://docs.kintra.io/authentication.md): The two credentials Kintra issues, how to get a gateway API key, and how to sign a request with it. - [Customers](https://docs.kintra.io/concepts/customers.md): Who a customer is in Kintra's model, how a Kintra customer maps onto a user you already have, and what a customer record carries. - [On-chain XP](https://docs.kintra.io/concepts/onchain-xp.md): The soulbound XP token, what mint and burn do, which balance a caller is reading, and why the chain is the one it is. - [Rewards and redemptions](https://docs.kintra.io/concepts/rewards-and-redemptions.md): The lifecycle from a reward you publish to a redemption that has settled, with the refusals along the way and what each record means. - [Tenants](https://docs.kintra.io/concepts/tenants.md): What a tenant is, how a request is placed inside one, and what the boundary around it does and does not cover. - [Tiers](https://docs.kintra.io/concepts/tiers.md): How tier membership is computed from a customer's XP balance, why it can move in both directions, and what changes when it does. - [XP and the ledger](https://docs.kintra.io/concepts/xp-and-the-ledger.md): XP as a ledger of signed integer movements, what a balance is, and what an earn and a redemption actually do. - [Request conventions](https://docs.kintra.io/conventions.md): The error envelope and its codes, the idempotency header a write needs, and what a rate limit returns. - [Kintra](https://docs.kintra.io/index.md): The loyalty platform behind your product: customers, XP, tiers, rewards, and the API you drive them with. - [Quickstart](https://docs.kintra.io/quickstart.md): From an API key to your first registered customer, in two signed requests. - [Award and redeem XP](https://docs.kintra.io/walkthroughs/award-and-redeem-xp.md): The loyalty loop end to end: XP granted, a balance that moves up, a reward, and a redemption that moves it back down. - [Onboard a customer](https://docs.kintra.io/walkthroughs/onboard-a-customer.md): A single request that registers a customer with everything you know about them: the required identity fields, plus attributes and cohort. ## OpenAPI Specs - [kintra-gateway](https://docs.kintra.io/openapi/kintra-gateway.json) - [kintra-app](https://docs.kintra.io/openapi/kintra-app.json) - [gateway](https://docs.kintra.io/scripts/lib/__fixtures__/gateway.json) - [app](https://docs.kintra.io/scripts/lib/__fixtures__/app.json)