encore-go-api▌
encoredev/skills · updated Apr 8, 2026
MDX-style export adds YAML metadata + attribution linking explainx.ai and this canonical listing URL.
When creating API endpoints with Encore Go, follow these patterns:
Encore Go API Endpoints
Instructions
When creating API endpoints with Encore Go, follow these patterns:
1. Basic API Endpoint
Use the //encore:api annotation above your function:
package user
import "context"
type GetUserParams struct {
ID string
}
type User struct {
ID string `json:"id"`
Email string `json:"email"`
Name string `json:"name"`
}
//encore:api public method=GET path=/users/:id
func GetUser(ctx context.Context, params *GetUserParams) (*User, error) {
// Implementation
return &User{ID: params.ID, Email: "[email protected]", Name: "John"}, nil
}
2. POST with Request Body
type CreateUserParams struct {
Email string `json:"email"`
Name string `json:"name"`
}
//encore:api public method=POST path=/users
func CreateUser(ctx context.Context, params *CreateUserParams) (*User, error) {
// Implementation
return &User{ID: "new-id", Email: params.Email, Name: params.Name}, nil
}
API Annotation Options
| Option | Values | Description |
|---|---|---|
public |
- | Accessible from outside |
private |
- | Only callable from other services |
auth |
- | Requires authentication |
method |
GET, POST, PUT, PATCH, DELETE | HTTP method |
path |
string | URL path with :param for path params |
sensitive |
- | Redacts request/response payloads from traces |
Examples
//encore:api public method=GET path=/health
//encore:api private method=POST path=/internal/process
//encore:api auth method=GET path=/profile
//encore:api public sensitive method=POST path=/auth/login
Sensitive Data
Mark sensitive fields to redact them from tracing logs:
type LoginParams struct {
Email string `json:"email"`
Password string `json:"password" encore:"sensitive"`
}
Or mark the entire endpoint as sensitive in the annotation:
//encore:api public sensitive method=POST path=/auth/login
func Login(ctx context.Context, params *LoginParams) (*TokenResponse, error) {
// Request and response will be redacted from traces
}
Custom HTTP Status Codes
Return custom HTTP status codes using the encore:"httpstatus" tag:
type CreateResponse struct {
ID string `json:"id"`
Status int `encore:"httpstatus"`
}
//encore:api public method=POST path=/items
func CreateItem(ctx context.Context, params *CreateParams) (*CreateResponse, error) {
item := createItem(params)
return &CreateResponse{
ID: item.ID,
Status: 201, // Returns HTTP 201 Created
}, nil
}
Request Parameter Sources
Path Parameters
// Path: /users/:id
type GetUserParams struct {
ID string // Automatically mapped from :id
}
Query Parameters
// Path: /users
type ListUsersParams struct {
Limit int `query:"limit"`
Offset int `query:"offset"`
}
//encore:api public method=GET path=/users
func ListUsers(ctx context.Context, params *ListUsersParams) (*ListResponse, error) {
// params.Limit and params.Offset come from query string
}
Headers
type WebhookParams struct {
Signature string `header:"X-Webhook-Signature"`
Payload string `json:"payload"`
}
Cookies
import "net/http"
type AuthParams struct {
SessionCookie *http.Cookie `cookie:"session"`
CSRFToken string `header:"X-CSRF-Token"`
}
//encore:api auth method=POST path=/logout
func Logout(ctx context.Context, params *AuthParams) error {
// Access params.SessionCookie.Value
return nil
}
Raw Endpoints
Use //encore:api raw for webhooks or direct HTTP access:
import "net/http"
//encore:api public raw path=/webhooks/stripe method=POST
func StripeWebhook(w http.ResponseWriter, req *http.Request) {
sig := req.Header.Get("Stripe-Signature")
// Handle raw request...
w.WriteHeader(http.StatusOK)
}
Response Types
Standard Response
type Response struct {
Message string `json:"message"`
}
//encore:api public method=GET path=/hello
func Hello(ctx context.Context) (*Response, error) {
return &Response{Message: "Hello, World!"}, nil
}
No Response Body
//encore:api public method=DELETE path=/users/:id
func DeleteUser(ctx context.Context, params *DeleteParams) error {
// Return only error (no response body on success)
return nil
}
No Request Parameters
//encore:api public method=GET path=/health
func Health(ctx context.Context) (*HealthResponse, error) {
return &HealthResponse{Status: "ok"}, nil
}
Error Handling
Use errs package for proper HTTP error responses:
import "encore.dev/beta/errs"
//encore:api public method=GET path=/users/:id
func GetUser(ctx context.Context, params *GetUserParams) (*User, error) {
user, err := findUser(params.ID)
if err != nil {
return nil, err
}
if user == nil {
return nil, &errs.Error{
Code: errs.NotFound,
Message: "user not found",
}
}
return user, nil
}
Common Error Codes
| Code | HTTP Status | Usage |
|---|---|---|
errs.NotFound |
404 | Resource doesn't exist |
how to use encore-go-api How to use encore-go-api on CursorAI-first code editor with Composer 1 PrerequisitesBefore installing skills in Cursor, ensure your development environment meets these requirements:
2 Execute installation commandExecute the skills CLI command in your project's root directory to begin installation: $npx skills add https://github.com/encoredev/skills --skill encore-go-api The skills CLI fetches 3 Select Cursor when promptedThe CLI will show a list of available agents. Use arrow keys to navigate and space to select Cursor: ◆ Which agents do you want to install to? │ │ ── Universal (.agents/skills) ── always included ──── │ • Amp │ • Antigravity │ • Cline │ • Codex │ ●Cursor(selected) │ • Cursor │ • Windsurf 4 Verify installationConfirm successful installation by checking the skill directory location: .cursor/skills/encore-go-api Reload or restart Cursor to activate encore-go-api. Access the skill through slash commands (e.g., ⚠ Security & Verification NoticeWe perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use. Skills execute code in your development environment. Always verify the publisher's identity, review recent commits, and test in isolated environments before production deployment. List & Monetize Your SkillSubmit your Claude Code skill and start earning Use Cases▌Task Automation & EfficiencyAutomate repetitive workflows and reduce manual effort Example Generate reports, summarize documents, draft communications ✓ Save 3-5 hours per week on routine tasks Knowledge EnhancementLearn new skills, understand complex topics, get expert guidance Example Explain concepts, provide examples, suggest learning resources ✓ Accelerate learning and skill development by 2x Quality ImprovementEnhance output quality through reviews, suggestions, and refinements Example Review drafts, suggest improvements, catch errors ✓ Improve work quality by 30-40% with less effort Implementation Guide▌Prerequisites
Time Estimate15-45 minutes depending on use case complexity Installation Steps
Common Pitfalls
Best Practices▌✓ Do
✗ Don't
💡 Pro Tips
When to Use This▌✓ Use WhenUse when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement. ✗ Avoid WhenAvoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion. Learning Path▌
DiscussionProduct Hunt–style comments (not star reviews)
general reviews Ratings4.5★★★★★48 reviews
showing 1-10 of 48 1 / 5 |