API reference

The path, response fields and errors of every released API endpoint.

The reference is built from the server schemas. Every build checks the responses of a running server and the examples on this page against them.

Common to all endpoints

  • Base URL: https://api.plutera.io.
  • Sign-in with an API key: Authentication.
  • Error shape and common errors: Errors.
  • Rate limit and the no-caching rule: Limits.

Check the key

GET/api/v1/mesince 2026-11-12

Returns the merchant, the environment and the public part of the key that signed the request. Changes nothing. Start your integration with this request: it shows that the key is accepted and which environment it belongs to.

  • The key secret is never returned in the response.
  • The labels an administrator gave the key in the console are not in the response.

Request

curl -sS https://api.plutera.io/api/v1/me \
  -H "Authorization: Bearer $PLUTERA_API_KEY"

No query parameters. A parameter with an unknown name is rejected.

The request has no body.

Response 200

FieldTypePresentDescription
merchantobjectalwaysThe merchant the key was issued to.
merchant.codestringalwaysMerchant code. Set when the merchant is created and never changes.
merchant.namestringalwaysMerchant name as registered with us.
environmentstringLIVE TESTalwaysThe key's environment. Every request made with this key runs in this environment.
keyobjectalwaysThe key that signed the request.
key.keyIdstringalwaysThe public part of the key. Not a secret: use it to refer to the key when talking to support.
key.expiresAtstring, ISO 8601 timestampor nullalwaysWhen the key stops being accepted, in UTC. null: no expiry is set.
Example response. The values are made up.
{
  "merchant": {
    "code": "example-shop",
    "name": "Example Shop"
  },
  "environment": "TEST",
  "key": {
    "keyId": "ak_test_examplekey000001",
    "expiresAt": "2027-02-10T00:00:00.000Z"
  }
}

Errors

The endpoint has no errors of its own, only the errors common to all endpoints.

List services

GET/api/v1/servicessince 2026-11-12

Returns the services the merchant can accept a payment with in the key's environment: payment method, currency, amount limits, payer fields and fee. Changes nothing.

  • The list contains only services that are fully ready to work. A service that is missing something on our side is absent from the response, not flagged.
  • The list depends on the key's environment: a test key and a live key of the same merchant may get different lists.
  • Amounts come as strings in minor units of the service currency. To show an amount to a person, divide it by minorUnit.
  • The list changes when an administrator enables or disables a service. Do not keep it for longer than a few minutes.

Request

curl -sS https://api.plutera.io/api/v1/services \
  -H "Authorization: Bearer $PLUTERA_API_KEY"

No query parameters. A parameter with an unknown name is rejected.

The request has no body.

Response 200

FieldTypePresentDescription
environmentstringLIVE TESTalwaysThe key's environment. The list is built for it.
itemsarray of objectsalwaysServices the merchant can accept a payment with right now. May be empty.
items[].codestringalwaysService code. Use it to name the service when creating a payment.
items[].directionstringPAYIN PAYOUTalwaysDirection of money: PAYIN payment acceptance, PAYOUT payout.
items[].methodobjectalwaysPayment method.
items[].method.codestringalwaysPayment method code.
items[].method.namestringalwaysPayment method name to show to people.
items[].currencystringalwaysService currency: the payment amount, the limits and a fixed fee are set in it.
items[].networkstringor nullalwaysNetwork, if the currency has several (cryptocurrencies). null: no network.
items[].flowstringDIRECT REDIRECT REQUISITE HOSTED_FIELDSalwaysHow the payment goes: DIRECT the merchant's server sends the payer's data, REDIRECT the payer goes to the provider's page, REQUISITE the payer gets payment details (QR, code, account), HOSTED_FIELDS the payer fills in the provider's ready-made form.
items[].minorUnitintegeralwaysHow many minor units are in one unit of the currency: 100 for BRL, 1 for JPY.
items[].amountobjectalwaysAmount limits.
items[].amount.minMinorstringor nullalwaysThe smallest payment amount in minor units. null: no lower limit.
items[].amount.maxMinorstringor nullalwaysThe largest payment amount in minor units. null: no upper limit.
items[].fieldsarray of objectsalwaysPayer fields the service accepts, in the same order as on the payment form.
items[].fields[].keystringalwaysField name. The field is sent under this name when creating a payment.
items[].fields[].kindstringTEXT DIGITS EMAIL PHONE DATE COUNTRYalwaysValue kind: TEXT string, DIGITS digits only, EMAIL email address, PHONE phone number in E.164 format, DATE date as YYYY-MM-DD, COUNTRY two-letter ISO 3166-1 country code.
items[].fields[].requiredbooleanalwaysWhether the field is required for this service.
items[].fields[].patternstringor nullalwaysRegular expression the whole value must match. null: no pattern check.
items[].fields[].maxLengthintegeralwaysMaximum value length in characters.
items[].feeobjectalwaysThe merchant's fee for a payment with this service.
items[].fee.typestringPERCENT FIXEDalwaysFee kind: PERCENT a percentage of the amount, FIXED a fixed amount.
items[].fee.percentstringor nullalwaysPercentage as a string with four decimal places, such as "1.9000". Set for PERCENT, otherwise null.
items[].fee.amountMinorstringor nullalwaysFixed amount in minor units of the service currency. Set for FIXED, otherwise null.
Example response. The values are made up.
{
  "environment": "TEST",
  "items": [
    {
      "code": "pix_brl_requisite",
      "direction": "PAYIN",
      "method": {
        "code": "PIX",
        "name": "Pix"
      },
      "currency": "BRL",
      "network": null,
      "flow": "REQUISITE",
      "minorUnit": 100,
      "amount": {
        "minMinor": "100",
        "maxMinor": "10000000"
      },
      "fields": [
        {
          "key": "payer.tax_id",
          "kind": "DIGITS",
          "required": true,
          "pattern": "^(\\d{11}|\\d{14})$",
          "maxLength": 14
        },
        {
          "key": "payer.name",
          "kind": "TEXT",
          "required": false,
          "pattern": null,
          "maxLength": 128
        }
      ],
      "fee": {
        "type": "PERCENT",
        "percent": "1.9000",
        "amountMinor": null
      }
    },
    {
      "code": "boleto_brl_requisite",
      "direction": "PAYIN",
      "method": {
        "code": "BOLETO",
        "name": "Boleto bancário"
      },
      "currency": "BRL",
      "network": null,
      "flow": "REQUISITE",
      "minorUnit": 100,
      "amount": {
        "minMinor": "500",
        "maxMinor": "1000000"
      },
      "fields": [
        {
          "key": "payer.tax_id",
          "kind": "DIGITS",
          "required": true,
          "pattern": "^(\\d{11}|\\d{14})$",
          "maxLength": 14
        },
        {
          "key": "payer.name",
          "kind": "TEXT",
          "required": true,
          "pattern": null,
          "maxLength": 128
        },
        {
          "key": "payer.email",
          "kind": "EMAIL",
          "required": false,
          "pattern": null,
          "maxLength": 254
        }
      ],
      "fee": {
        "type": "FIXED",
        "percent": null,
        "amountMinor": "250"
      }
    }
  ]
}

Errors

The endpoint has no errors of its own, only the errors common to all endpoints.

Reserved paths

These paths are reserved for endpoints that have not been released yet. The server answers them with a 501 error, with or without a key. You can use a path from the day it appears above and in the changelog: until then its behaviour may change without notice.

MethodPathCurrent response
POST/api/v1/payments501
GET/api/v1/payments/:id501
GET/api/v1/payments501

API v1 · built 2026-11-12 · release 9f884b9

The API reference is built from the server code: it never describes an endpoint that does not exist.