Costa Rica Checkout for WooCommerce brings the local needs of a Costa Rican online store together in one well-maintained plugin. Each feature is a module that you can enable or disable in WooCommerce → Settings → Costa Rica.
SINPE Móvil payments
- Manual payment method: customers pay from their bank app and you confirm the payment from the order screen.
- Shows the SINPE Móvil number, the account holder, the exact amount in colones and a reference on the order received page and in the on-hold email.
- Stores in dollars: the amount in colones is calculated with the exchange rate of the day (sell or buy, plus an optional surcharge) and frozen in the order. This needs the Exchange rate module; stores that sell in colones do not.
- Customers upload the payment receipt (JPG, PNG, WEBP or PDF) from the order received page or from My Account. Receipts are stored privately, outside the Media Library, and only store staff and the customer can see them.
- “Confirm payment” and “Reject payment” buttons in the order screen, and an email to the store when a receipt arrives.
- Optional maximum amount per order, so the method is hidden above your bank’s SINPE Móvil limit.
- Works with the block and classic checkouts.
Exchange rate
- Off by default: the plugin makes no external requests until you enable this module.
- US dollar buy and sell rates from the Ministerio de Hacienda (no credentials), from the Banco Central de Costa Rica (with your own BCCR token), or a manual rate.
- Updated in the background twice a day. Customers never wait for an external service: the checkout always reads the stored rate.
- If the source fails, the last good rate is kept. If it gets too old, you see a notice and SINPE Móvil is hidden in stores that sell in dollars.
- Functions for developers:
crkit_get_exchange_rate() and crkit_convert_to_crc().
Provinces, cantons and districts
- Official 2025 administrative division (Decreto Ejecutivo 44882-MGP): 7 provinces, 84 cantons and 492 districts. The provinces are WooCommerce’s own.
- Classic checkout and My Account: dependent province → canton → district selects with search.
- Block checkout: after the province, a district select that lists only that province’s districts.
- The canton is saved as the city and the postcode (5 digits) is filled in automatically, so shipping zones and other plugins keep working with standard address fields.
- Addresses read “District, Canton, Province” in the order screen, emails and My Account.
Exchange rate on your pages
[crkit_exchange_rate] shortcode and an “Exchange rate (Costa Rica)” block. Shortcode attributes: type="both|sell|buy", show_date="yes|no", show_source="yes|no", hide_outdated="yes|no" and inline="yes|no" (use inline="yes" inside a sentence). An outdated rate is shown with its date unless you hide it.
ID number (cédula)
- ID type (cédula física, cédula jurídica, DIMEX or NITE) and number in the classic and block checkouts.
- The number is checked against the format Hacienda sets for each type (for example, a cédula física has 9 digits and does not start with 0). Hyphens and spaces are removed. Cédulas jurídicas with letters, announced by the Registro Nacional, are accepted.
- Choose whether the ID is optional, required, or required only when the customer checks “I need an electronic invoice”.
- Shown with the billing address in the order screen, emails, the order received page and My Account. Customers can change it in My Account → Account details, where it is always optional; with “Required”, customers without one see a reminder there.
- When the customer asks for an electronic invoice, the store’s emails say so with the ID, and the customer’s emails show the ID the invoice will be issued to, so typing mistakes are caught early.
- For developers:
crkit_get_order_identification( $order ), the crkit_order_identification filter and the crkit_order_identification_saved action.
Important: this plugin does not process payments automatically. SINPE Móvil payments are confirmed manually by the store. It does not generate electronic invoices.
Known limitations
- SINPE Móvil payments are not verified automatically: there is no public API to check transfers.
- No electronic invoices: the ID number is stored for your electronic invoicing plugin.
- ID numbers are checked by format only (there is no public check digit). Hacienda’s “Extranjero No Domiciliado” and “No Contribuyente” types are not offered.
- The classic cart’s shipping calculator does not ask for canton and district; shipping rates that depend on them are exact at checkout.
- In the block checkout the district is a regular dropdown without search, sorted by canton.
- The included Spanish translations load automatically from WordPress 6.8. On WordPress 6.7 the plugin appears in English.
- The exchange rate depends on the Ministerio de Hacienda or BCCR services. If they fail, the last good rate is kept; if it gets too old, SINPE Móvil is hidden in stores that sell in dollars until a new rate arrives or you set a manual one.
Compatible with WooCommerce High-Performance Order Storage (HPOS) and the block checkout. Includes Spanish translations for Costa Rica (es_CR) and Spain (es_ES).
Development happens on GitHub: https://github.com/arielcr/costa-rica-checkout-for-woocommerce. Bug reports and pull requests are welcome.
External services
The exchange rate module connects to the services below to get the US dollar buy and sell rates. It is off by default: nothing is requested until you enable it in WooCommerce → Settings → Costa Rica. Once it is enabled, requests are made:
- in the background right after you enable the module, and then every 12 hours;
- when an administrator changes the source or the BCCR token in the settings;
- when an administrator clicks “Update now”.
They never run while a customer browses the store or checks out: the store always reads the saved rate. No personal data about customers or orders is sent. Each request identifies the plugin in its User-Agent header (plugin name, version and its WordPress.org page); the service also sees the server’s IP address, as with any web request. The site address is not sent. To stop all requests, disable the exchange rate module.
Ministerio de Hacienda de Costa Rica (default source)
- Request:
GET https://api.hacienda.go.cr/indicadores/tc.
- Sends: only the request for the current exchange rate. No credentials and no personal data.
- API documentation, with its usage policy and limits: https://api.hacienda.go.cr/docs/
- Terms of use: the Ministerio de Hacienda does not publish separate terms of use for this API; the usage policy is in the API documentation above.
- Privacy policy: https://www.hacienda.go.cr/docs/PoliticadePrivacidadDirectrizN.DM-009-2021.pdf
Banco Central de Costa Rica (BCCR) economic indicators API (optional)
- Used only if the store selects the BCCR as the exchange rate source.
- Request:
GET https://apim.bccr.fi.cr/SDDE/api/Bccr.GE.SDDE.Publico.Indicadores.API/cuadro/1/series with the date range of the last week.
- Sends: the date range and the API token that the store owner generated in the BCCR site. No customer data.
- Economic indicators site (where the token is generated): https://sdd.bccr.fi.cr/es/IndicadoresEconomicos/
- Data use policy: https://www.bccr.fi.cr/cr/es/politica-uso-datos.html
- Website policies: https://www.bccr.fi.cr/cr/es/politicas-del-sitio-web.html