← Files GitBookARCHIVED FILE
references/example-site/developers/v2/getting-started/quickstart.md
5.37 KB · Sep 30, 2026 · 23:20 UTC
---
description: >-
Make your first API call to Evolve in five minutes — in your language of
choice.
icon: rocket
---
# Quickstart
This walkthrough takes a single test charge end to end. By the time you're done, you'll have proven your environment is set up, your auth works, and a payment landed in your dashboard.
You don't need a production account or any prior payments experience to follow along.
## Prerequisites
* A test API key from [https://dashboard.test.evolve.com](https://gitbook.com) → **Developers → API keys**. It starts with `sk_test_`.
* Your language's package manager set up (`npm`, `pip`, `go get`, or `gem`).
{% hint style="warning" %}
**Treat secret keys like passwords.** Never commit them to source control or paste them into client-side code. Use environment variables.
{% endhint %}
## 1. Install the SDK
{% tabs %}
{% tab title="Node" %}
```bash
npm install @evolve/node
```
{% endtab %}
{% tab title="Python" %}
```bash
pip install evolve
```
{% endtab %}
{% tab title="Go" %}
```bash
go get github.com/evolve-pay/evolve-go
```
{% endtab %}
{% tab title="Ruby" %}
```bash
gem install evolve
```
{% endtab %}
{% tab title="cURL" %}
```bash
# No install needed.
```
{% endtab %}
{% endtabs %}
## 2. Make your first charge
{% tabs %}
{% tab title="Node" %}
```js
import Evolve from "@evolve/node";
const evolve = new Evolve(process.env.EVOLVE_SECRET_KEY);
const charge = await evolve.charges.create({
amount: 4200,
currency: "usd",
source: "tok_visa",
description: "First test payment",
}, {
idempotencyKey: crypto.randomUUID(),
});
console.log(charge.id, charge.status);
```
{% endtab %}
{% tab title="Python" %}
```python
import os, uuid
import evolve
evolve.api_key = os.environ["EVOLVE_SECRET_KEY"]
charge = evolve.Charge.create(
amount=4200,
currency="usd",
source="tok_visa",
description="First test payment",
idempotency_key=str(uuid.uuid4()),
)
print(charge.id, charge.status)
```
{% endtab %}
{% tab title="Go" %}
```go
package main
import (
"fmt"
"os"
"github.com/evolve-pay/evolve-go"
"github.com/evolve-pay/evolve-go/charge"
"github.com/google/uuid"
)
func main() {
evolve.Key = os.Getenv("EVOLVE_SECRET_KEY")
params := &evolve.ChargeParams{
Amount: evolve.Int64(4200),
Currency: evolve.String("usd"),
Source: evolve.String("tok_visa"),
Description: evolve.String("First test payment"),
}
params.SetIdempotencyKey(uuid.NewString())
ch, err := charge.New(params)
if err != nil {
panic(err)
}
fmt.Println(ch.ID, ch.Status)
}
```
{% endtab %}
{% tab title="Ruby" %}
```ruby
require "evolve"
require "securerandom"
Evolve.api_key = ENV["EVOLVE_SECRET_KEY"]
charge = Evolve::Charge.create(
{
amount: 4200,
currency: "usd",
source: "tok_visa",
description: "First test payment",
},
idempotency_key: SecureRandom.uuid
)
puts "#{charge.id} #{charge.status}"
```
{% endtab %}
{% tab title="cURL" %}
```bash
curl https://api.test.evolve.com/v2/charges \
-H "Authorization: Bearer $EVOLVE_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-d amount=4200 \
-d currency=usd \
-d source=tok_visa \
-d description="First test payment"
```
{% endtab %}
{% endtabs %}
A successful response looks like:
```json
{
"id": "ch_3KsM12pL9qXa7",
"object": "charge",
"amount": 4200,
"currency": "usd",
"status": "succeeded",
"created": 1714477200,
"payment_method": { "type": "card", "brand": "visa", "last4": "4242" }
}
```
## 3. Verify it landed
Open [https://dashboard.test.evolve.com/payments](https://gitbook.com). Your charge should be at the top of the list. Click it to see the request that created it, the timeline, and the webhook deliveries.
## 4. Receive a webhook
Most production integrations react to webhook events rather than polling.
{% stepper %}
{% step %}
#### Add an endpoint
In the dashboard, **Developers → Webhooks → Add endpoint**. For local testing, use a tool like [ngrok](https://ngrok.com) to expose `localhost`. Subscribe to `charge.succeeded` and `charge.failed` to start.
{% endstep %}
{% step %}
#### Verify the signature
Every event Evolve sends is HMAC-signed. Verify the signature before acting on it — see [Verifying signatures](../webhooks/verifying-signatures.md).
{% endstep %}
{% step %}
#### Replay events
Webhooks fail; that's normal. The dashboard's webhook log shows every delivery and lets you replay any event with one click. See [Retries and replay](../webhooks/retries-and-replay.md).
{% endstep %}
{% endstepper %}
## What's next
<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><h4><i class="fa-key" style="color:$primary;">:key:</i></h4></td><td><strong>Auth deep dive</strong></td><td>Restricted keys, signature verification, rotation.</td><td><a href="authentication.md">authentication.md</a></td></tr><tr><td><h4><i class="fa-list-ul" style="color:$primary;">:list-ul:</i></h4></td><td><strong>Conventions</strong></td><td>Errors, idempotency, pagination, rate limits.</td><td><a href="conventions.md">conventions.md</a></td></tr><tr><td><h4><i class="fa-credit-card" style="color:$primary;">:credit-card:</i></h4></td><td><strong>Payments API</strong></td><td>Full reference for charges, refunds, payouts.</td><td><a href="../payments-api/">payments-api</a></td></tr></tbody></table>
SHA-256: 0a2b80e1c14d05fad2706e2f54f9a95ff6e266cfc6468c1dbc06360cbed7b35f