1 number · 1 website · 1 SMS

Your Private Second Number — Ready in Seconds

Receive SMS online without sharing your personal phone number.
For business, sign-ups and everyday privacy.

Receive codes from the apps you use

CodeySMS numbers work for sign-ups on thousands of websites and apps, from web shops to games.

  • Numbers from the Netherlands, Belgium and Germany.
  • Fast delivery: most codes arrive within seconds.
  • Only pay for a delivered SMS: €0.50 each.
  • Re-use your number for the same website at half price.
Explore all services

How it works?

Lightning-fast delivery with no hidden fees – you only pay when the SMS is successfully delivered

  1. 1

    Choose your service

    Pick from popular websites or type any website you need.

    Choose service
  2. 2

    Send the SMS

    Use the temporary number with the correct country code.

  3. 3

    Get your code

    Your SMS arrives instantly. You only pay on delivery.

Supported services

Our numbers receive SMS from a wide range of online services

Social & Communication

Receive codes from social and messaging apps.

Shopping, Delivery & Lifestyle

Use a number for marketplaces, delivery apps, tickets and lifestyle services.

Gaming & Entertainment

Receive codes from gaming and entertainment services.

Secure payments

Pay safely with crypto. Payments go through a trusted crypto payment provider, and the amount is added to your balance automatically once the payment is confirmed.

Available payment methods

Pay with crypto for more privacy.

Don't see your coin? Contact us and we'll look into adding it.

  • BTCBitcoin
  • ETHEthereum
  • USDTTether
  • USDCUSD Coin
  • LTCLitecoin
  • SOLSolana
  • TRXTron
  • DOGEDogecoin
  • BNBBNB
1

Top Up Your Balance

Easily add money to your account with the cryptocurrency of your choice.

2

Use Your Balance as Needed

Your balance is automatically deducted with each SMS verification and refunded if no SMS arrives, so you only pay for what you use.

3

Track Your Spending

My numbers gives you a clear overview of every number, code and price, so you always know where your money is going.

API v1

Seamless Integration with Our Powerful API

Easily build SMS reception into your own tools and workflows with our API. Create your personal API key and automate ordering numbers and reading codes.

Explore API documentation

Pay per SMS, not per month

Top up your balance once and use it whenever you like. Your balance never expires.

Simple pricing

€0.50per SMS

  • €0.25 to re-use your number for the same website
  • Money back on your balance if no SMS arrives
  • Your balance never expires

Top up your balance

Choose an amount

Minimum €10, maximum €1000

Pay with crypto such as Bitcoin, Ethereum, USDT and Litecoin. The amount is added to your balance as soon as the payment is confirmed on the blockchain.

Frequently Asked Questions

Which countries do you have numbers for?

We currently offer Netherlands (+31), Belgium (+32) and Germany (+49) numbers. More countries may be added later.

Can I re-use a number?

Yes, if you already received an SMS on it. You can re-use the same number for the same website, for example when you need a new code: open My numbers and click Re-use. A re-use costs half the price and works as long as the number is still active with us. No one else will ever get that number for that website.

A website says 'All numbers used for this site'?

Each number is only used once for a given website. When every number we have in that country has already been used for that website, you see this message. Choose another country, or contact our support and we will add more numbers for it.

The order says 'Expired' and no SMS came in?

Unfortunately the SMS didn't arrive in time. But you don't lose anything: the amount is returned to your balance automatically. Just make a new order and try again.

How long is a number mine?

Until the first SMS arrives or the time runs out. After that the number is never given to anyone else for the same website, but you can re-use it yourself.

What if no SMS arrives?

Cancel the request or let the time run out. The amount is returned to your balance automatically.

Can I receive more than one SMS?

Each order is for one SMS. Need a new code? Re-use your number from My numbers, or make a new order.

How long does a crypto payment take?

It depends on the coin. USDT (TRC20) and Litecoin usually confirm within a few minutes; Bitcoin can take longer.

Who can see my messages?

Only you. When you use one of our numbers on a website, only you receive that website's SMS, just once. The number is never given to anyone else for that same website.

Can I use a number for anything?

No. Use CodeySMS in line with the terms of the website you're receiving the code for. Misuse, such as fraud or mass account creation, gets your account blocked.

API v1

API documentation

A JSON API to order numbers and read verification codes from your own software.

Overview

Base URLhttps://www.codeysms.com/api/v1

Every path below is relative to the base URL. Every response is JSON. Amounts are always in EUR, timestamps always in UTC (ISO 8601).

The API offers the same two products as the website. A one-time number receives one SMS for one website and stays open for 20 minutes; if no SMS arrives, or you cancel, the price goes back to your balance. A rental number is yours for 1, 3, 6 or 12 months and receives every SMS sent to it.

Building with an AI assistant? Give it /api/v1/openapi.json. That file describes every endpoint, field and error code, so it can write a working client without guessing.

Your API keys

Log in to create an API key. A key gives full access to your account through the API, including your balance, so keep it secret.

Authentication

Send your key in the Authorization header of every request. Keys are never accepted in the URL, because URLs end up in logs and browser history.

curl https://www.codeysms.com/api/v1/account \
  -H "Authorization: Bearer $CODEYSMS_KEY"

GET /account is the cheapest way to check that a key works. A missing key answers 401 unauthenticated, a wrong or revoked key 401 invalid_token.

Quickstart: order a number and read the code

  1. Order a number: POST /orders.
  2. Enter the number on the website and let it send the SMS.
  3. Poll GET /orders/{id}/messages every few seconds until data is not empty.
export CODEYSMS_KEY="csk_your_key"

# 1. Order a number for a website
curl -s -X POST https://www.codeysms.com/api/v1/orders \
  -H "Authorization: Bearer $CODEYSMS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"website": "myshop.com", "country": "NL", "max_price": "0.50"}'

# 2. Poll every few seconds until data is not empty
curl -s https://www.codeysms.com/api/v1/orders/123/messages \
  -H "Authorization: Bearer $CODEYSMS_KEY"

# No SMS after all? Cancel and get your money back
curl -s -X POST https://www.codeysms.com/api/v1/orders/123/cancel \
  -H "Authorization: Bearer $CODEYSMS_KEY"

What comes back

POST /orders answers 201 Created with the order:

HTTP/1.1 201 Created
Location: /api/v1/orders/123

{
  "object": "order",
  "id": 123,
  "status": "pending",
  "website": "myshop.com",
  "country": "NL",
  "phone_number": "+31612345678",
  "phone_number_local": "0612345678",
  "price": { "amount": "0.50", "amount_minor": 50, "currency": "EUR" },
  "reusable": false,
  "created_at": "2026-11-01T12:00:00Z",
  "expires_at": "2026-11-01T12:20:00Z",
  "closed_at": null,
  "code": null,
  "messages": []
}

Once the SMS arrives, GET /orders/{id}/messages returns it:

{
  "data": [
    {
      "object": "message",
      "sender": "MyShop",
      "text": "Your verification code is 591204.",
      "code": "591204",
      "received_at": "2026-11-01T12:01:12Z"
    }
  ],
  "order_id": 123,
  "order_status": "completed"
}
  • code is the verification code we found in the message, so you don't need your own regex. If there is no clear code, it is null and text has the full message.
  • An empty data with order_status: "pending" means: keep waiting. Any other status means the order is over.
  • phone_number is in international format (E.164); phone_number_local is the national format, for forms that want that.
  • An account can have one open order at a time. A second order while one is open answers 409 concurrent_order_limit.

Errors

Every error is an application/problem+json document (RFC 9457) with the matching HTTP status. Branch on code: these values never change meaning. retryable tells you whether the same request can succeed later.

HTTP/1.1 402 Payment Required
Content-Type: application/problem+json

{
  "type": "https://www.codeysms.com/api#error-insufficient_balance",
  "title": "Insufficient balance",
  "status": 402,
  "code": "insufficient_balance",
  "detail": "Your balance is too low. Please top up first.",
  "retryable": false
}
codeHTTPRetryableMeaning
unauthenticated401noNo API key was sent.
invalid_token401noThe API key is not valid or was revoked.
account_restricted403noThis account cannot place orders. Contact support.
insufficient_balance402noYour balance does not cover this. Top up first.
not_found404noNo such endpoint.
order_not_found404noNo order with that id on your account.
rental_not_found404noNo rental with that id on your account.
method_not_allowed405noWrong HTTP method. The Allow header lists the right ones.
out_of_stock409yesNo number is available for that website and country right now. Try again later or another country.
concurrent_order_limit409noYou already have an open order. Finish or cancel it first.
order_not_open409noThe order is already completed, cancelled or expired.
number_unavailable409noThe number behind this order is no longer available for re-use.
number_busy409yesThe number is busy with another order right now. Try again in a few minutes.
unsupported_media_type415noSend JSON with Content-Type: application/json.
validation_failed422noThe request is not valid. errors names the fields.
invalid_website422noThe website is not a valid domain, such as myshop.com.
website_blocked422noWe don't issue numbers for banks and government services.
country_not_supported422noWe don't offer that country.
invalid_plan422noUnknown rental plan. Valid plans are listed in the response.
order_not_completed422noOnly an order that received an SMS can be re-used.
price_above_maximum422noThe price is above your max_price. Nothing was bought.
rate_limited429yesToo many requests. Wait for the Retry-After header.
hourly_order_limit429yesYou reached the maximum number of orders per hour.
internal_error500yesSomething went wrong on our side. Try again shortly.

Rate limits

Limits count per account, per minute. Reading is generous, because polling for a code is cheap; ordering is stricter.

BucketPer minuteApplies to
read240All authenticated GET requests, including polling
write60Cancelling orders and changing rentals
order30Ordering, re-using and renting
public60Endpoints without a key, counted per IP address

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix time). Over the limit you get 429 rate_limited with a Retry-After header in seconds.

Pagination

GET /orders uses a cursor: pass limit (default 25, maximum 100) and keep sending pagination.next_cursor back as cursor until has_more is false. Treat the cursor as an opaque string.

Endpoints

MethodPathWhat it doesLimit
GET/accountYour e-mail address, balance and number of open orders.read
GET/countriesCountries and whether a number is available. No key needed.public
GET/pricesCurrent prices for one-time numbers, re-use and rental plans. No key needed.public
POST/ordersOrder a one-time number. Body: website, country (NL, BE or DE), optional max_price. Answers 201.order
GET/ordersYour orders, newest first. Query: limit (1–100), cursor, status.read
GET/orders/{id}One order, including its messages.read
GET/orders/{id}/messagesThe messages of one order. Poll this until data is not empty.read
POST/orders/{id}/cancelCancel an open order. The price goes back to your balance.write
POST/orders/{id}/reuseOrder the same number again for the same website, at half price. Only after the order received an SMS. Answers 201.order
GET/rentalsYour rental numbers.read
POST/rentalsRent a number. Body: plan (m1, m3, m6, m12), country, optional auto_renew (default true). Answers 201.order
GET/rentals/{id}One rental.read
GET/rentals/{id}/messagesMessages received on a rental, newest first (last 100).read
POST/rentals/{id}/auto-renewTurn auto-renewal on or off. Body: enabled (true or false).write
GET/openapi.jsonThe full machine-readable description of this API (OpenAPI 3.1).public

Objects

Order statuses

pending waiting for the SMS · completed SMS received · cancelled cancelled, money back · expired time ran out without an SMS, money back.

Money

Amounts are objects: {"amount": "0.50", "amount_minor": 50, "currency": "EUR"}. Use amount_minor (cents) for calculations.

Rental

id, status (active or ended), country, phone_number, phone_number_local, plan, months, price, auto_renew, started_at, ends_at, ended_at.

Support

We're here to help!

E-mail support

Mail us!

You can e-mail us with any question or problem. We'll get back to you as soon as possible.

support@codeysms.com

Tip: when you contact us, mention the e-mail address of your account and, for a question about an order, the order number (for example #123). Then we can help you faster.

Long-term solution

Get Your Own Private Phone Number

Rent a dedicated number just for you and receive every SMS at no extra cost.

Starting from€5.83/mo

Just need a quick, one-time SMS verification? Try our regular service from just €0.50

Choose Your Plan

Save more with a longer period

Choose Your Country

Why Choose Our Long-Term Numbers?

A private number with everything you need for long-term use.

100% Private

The number is assigned to you alone. No one else can see your messages.

Receive All SMS

Get every SMS sent to your number, from any website or app.

No Extra Costs

Pay once per period. No cost per message and no hidden fees.

Auto Renewal

Keep your number as long as you like with automatic renewal from your balance.

How It Works

  1. 1

    Choose your plan and country

    Pick a period and a number from the Netherlands (+31), Belgium (+32) or Germany (+49).

  2. 2

    Confirm your purchase

    Pay from your balance. Your number is assigned to your account straight away.

  3. 3

    Start receiving SMS

    All incoming messages appear on this page in real time.

Frequently Asked Questions

How long does the rental last?

For the period you choose: 1, 3, 6 or 12 months. With auto-renewal on, your rental renews from your balance at the end of each period.

Can I get a refund if the number doesn't work for my service?

A rental can't be refunded once the number is assigned, because the number is then reserved for you alone. Not sure if a website accepts our numbers? Try it first with a one-time number.

What happens when my rental expires?

With auto-renewal on and enough balance, it renews automatically. Otherwise the number is switched off and never given to anyone else, so no one can receive your messages.

How many SMS can I receive?

As many as you like. There is no cost per message.

Can I use this number for WhatsApp or other messaging apps?

You can receive their SMS codes on it. Voice calls are not supported, so verification by phone call won't work.

Ready to Get Your Private Number?

Start receiving SMS on your own number today. No sharing, no limits.

New request
The number can only be used for this website.
Number country

Your numbers

Your last 20 requests and the codes that came in.

WebsiteNumberStatusCodePriceTimeActions

Confirm your rental

Country
–
Period
–
Price
–
Your balance
–

Login